/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package th.stripes.action;

import able.stripes.JSP;
import com.google.inject.Inject;
import com.oas.thit._this.balenq.xsd.BalanceEnquiryRequestBody;
import com.oas.thit._this.balenq.xsd.BalanceEnquiryResponseBody;
import com.oas.thit._this.offer.decline.xsd.DeclineRequestBody;
import com.oas.thit._this.offer.queryaccept.xsd.OfferQueryAcceptResponseBody;
import com.oas.thit._this.profile.depositor.xsd.DepositorProfileResponseBody;
import com.oas.thit._this.offer.group.xsd.AddToGroupQueryResponseBody;
import com.oas.thit._this.hajj.group.xsd.Member;
import com.oas.thit._this.hajj.xsd.HajjResponseBody;
import com.oas.thit._this.offer.group.xsd.GroupQueryResponseBody;
import com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryRequestBody;
import com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryResponse;
import com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryResponseBody;
//import com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryRequestBody;
//import com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryResponse;
//import com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryResponseBody;
import com.oas.thit._this.offer.queryaccept.xsd.OfferAcceptRequestBody;
//import com.oas.thit._this.offer.queryaccept.xsd.OfferQueryResponse;
//import com.oas.thit._this.offer.queryaccept.xsd.OfferQueryResponseBody;
import com.oas.thit._this.offer.queryaccept.xsd.OfferQueryAcceptResponse;
import com.oas.thit._this.offer.queryaccept.xsd.OfferQueryAcceptResponseBody;
import com.oas.thit._this.offer.queryaccept.xsd.OfferQueryResponse;
import com.oas.thit._this.offer.queryaccept.xsd.OfferQueryResponseBody;
import com.oas.thit._this.profile.depositor.update.xsd.DepositorProfileUpdateRequestBody;
import com.oas.thit._this.queryacct.xsd.QueryAccountRequestBody;
import com.oas.thit._this.xsd.THISBaseDataElementBody;
import com.oas.thit.xmlmessage.xsd.Header;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBElement;
import net.sourceforge.stripes.action.Before;
import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.HandlesEvent;
import net.sourceforge.stripes.action.HttpCache;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.action.UrlBinding;
import net.sourceforge.stripes.action.Wizard;
import net.sourceforge.stripes.controller.LifecycleStage;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import th.config.ableContextListener;
import th.dao.KodBandarDAO;
import th.dao.KodHubunganDAO;
import th.dao.KodJantinaDAO;
import th.dao.KodKahwinDAO;
import th.dao.KodNegeriDAO;
import th.dao.KodPekerjaanDAO;
import th.dao.KodSektorPekerjaanDAO;
import th.dao.KodStatusDAO;
import th.dao.KodStatusHajiDAO;
import th.dao.KodTahapPengajianDAO;
import th.dao.KodUrusanDAO;
import th.dao.KodWarganegaraDAO;
import th.dao.PoskodDAO;
import th.dao.PusatKosDAO;
import th.dao.TahunPilihanDAO;
import th.manager.HajjManager;
import th.manager.ResponseManager;
import th.manager.SejarahTransaksiManager;
import th.model.Haji;
import th.model.Deposit;
import th.model.InfoAudit;
import th.model.KodJantina;
import th.model.KodStatus;
import th.model.Kumpulan;
import th.model.Pengguna;
import th.model.PermohonanMaklumat;
import th.model.PermohonanMaklumatKumpulan;
import th.model.PermohonanMaklumatWaris;
import th.model.PilihanDestinasi;
import th.model.Poskod;
import th.model.SejarahTransaksi;
import th.model.SuratTawaran;
import th.stripes.BaseActionBean;
import th.stripes.Configuration;
import th.stripes.config.AuthRequired;
import th.stripes.util.AccCheckUtil;
import th.stripes.util.DateFormatDetector;
import th.stripes.util.ListUtil;
import th.stripes.util.Util;
import th.stripes.webservice.WebServiceUtil;
import th.stripes.action.DepositActionBean;



/**
 *
 * @author MSI
 */

@AuthRequired
@HttpCache(allow = false)
@Wizard(startEvents = "HajjResp_Step1")
@UrlBinding("/haji/response")
public class HajiResponseActionBean extends BaseActionBean{
    
    
    private Pengguna pengguna;
    private Haji haji;
    private Kumpulan kumpulan;
    private Deposit deposit;
    
    private static String SUCCESSFUL = "0000";
    private static String SYSTEM_ERROR = "9999"; 
    private static String ALREADY_RESPOND_OFFER = "6060";
    private static String ALREADY_DECLINE_OFFER = "6301";
    private static String OUTDATED_OFFER = "6300";
    private static String INVALID_ACC_IC = "9000"; 
    private static String NO_HAJJ_OFR_RECORD = "7000";
    private static String NO_FLIGHT_SCH_RECORD = "7000";
    private static String ACCOUNT_ALREADY_REGISTRED = "7000";
    private static String UNSUCCESSFULL = "1000";    
    private static String UNSUFFICIENT_MONEY = "5000";
    private static String ERROR_AT_MEMBER_INFO = "6400";
    private static String GROUP_HAS_KT = "6400";
    private static String MAHRAM_NOT_REG_HAJJ = "9100";
    private static String MAHRAM_HAVE_PERFORM_HAJJ = "9101";
    private static String MAHRAM_WOMEN = "9102";

    
    private static String HAJJ_OFFR_ENQ_MSG_ID="TPHJACCPWD01";
    private static String HEADER_ID_ENQ="THSHOQR";
    private static String OFFER_DECLINE_MSG_ID="TPHJACCPWD02";
    private static String HEADER_ID_TOLAK="THSHODL";
    private static String HAJJ_OFFR_QUERY_GROUP_MSG_ID = "TPHJACCPWD03";
    private static String HEADER_ID_OFFR_QUERY_GROUP="THSHGQR";
    private static String HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID = "TPHJACCPWD04";
    private static String HEADER_ID_OFFR_ACC_ADD_TO_GROUP_ENQ="THSHAQR";   
    private static String HAJJ_OFFR_ACCP_SUBMIT_MSG_ID = "TPHJACCPWD05";
    private static String HEADER_ID_OFFR_ACCP_MSG_ID="THSHOAC";
    private static String PROFILE_ENQ_MSG_ID = "TPDPPROFWD01";
    private static String HEADER_ID_PROFILE_ENQUIRY = "THSDPQR";
        
    private static String BAL_ENQ_MSG_ID = "TPBALENQWD01";
    private static String HEADER_ID_BALANCE_ENQUIRY = "THSBENQ";
    
    private static String HAJ_ENQ_MSG_ID = "TPHOFRCKWD01";
    private static String HEADER_ID_HAJ_OFFER_CHECK = "THSHOCK";
    
    //MAHRAM
    private static String MAHRAM_ENQ_MSG_ID = "TPHJACCPWD08";
    private static String HEADER_ID_MAHRAM_ENQUIRY = "THSHOMQ";
    
    private static String ACCEPTED = "6000";
    private static String DECLINED = "6301";
    private static String CLOSED = "6300";
    
    private static String KOD_URUSAN_JAWAB = "02";
    private static String KOD_STATUS_TERIMA= "A";
    private static String KOD_STATUS_TOLAK = "B";
    private static String KOD_STATUS_TAMAT = "C";
    private static String STATUS_TAMBAHAN_WUJUD = "A";
    private static String STATUS_TAMBAHAN_CIPTA = "C";
    private static String STATUS_TAMBAHAN_UBAH = "U";
    private static String NOT_ADDED_TO_ANY_GROUP = "6401";
    
    //added in 18112014
    
    private static String UPD_PROFILE_MSG_ID = "TPDPPROFWD02";
    private static String HEADER_ID_UPD_PROFILE = "THSDPUP";  

    @Inject HajjManager hajjManager;    
    @Inject private KodUrusanDAO kodUrusanDAO;
    @Inject private KodNegeriDAO kodNegeriDAO;
    @Inject private PoskodDAO poskodDAO;
    @Inject private KodKahwinDAO kodKahwinDAO;
    @Inject private KodWarganegaraDAO kodWarganegaraDAO;
    @Inject private KodTahapPengajianDAO kodTahapPengajianDAO;
    @Inject private KodSektorPekerjaanDAO kodSektorPekerjaanDAO;
    @Inject private KodPekerjaanDAO kodPekerjaanDAO;
    @Inject private KodHubunganDAO kodHubunganDAO;
    @Inject private KodStatusDAO kodStatusDAO;
    @Inject private KodStatusHajiDAO kodStatusHajiDAO;
    @Inject private PusatKosDAO pusatKosDAO;
    @Inject private KodBandarDAO kodBandarDAO;
    @Inject private ListUtil listUtil;
    @Inject private WebServiceUtil webUtil;
    @Inject private ResponseManager responseManager;
    @Inject private SejarahTransaksiManager sejarahTransaksiManager;
    @Inject private Configuration conf;
    @Inject private TahunPilihanDAO tahunPilihan; 
    @Inject private KodJantinaDAO kodJantinaDAO;
    @Inject private Util util;
    private static Logger LOG = Logger.getLogger(DepositActionBean.class);
    
    @DefaultHandler
    public Resolution showMainForm() {
        return new JSP("haji/main_haji.jsp");
    }
        
    @Before(stages={LifecycleStage.BindingAndValidation})
    public void rehydrate() {
        pengguna = getContext().getCurrentUser();        
    }
//-+-+-+-+-+-+-+-+-+-+-+-+-+-JAWAB TAWARAN HAJI-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+//      
    @AuthRequired
    @HandlesEvent("HajjResp_Step1")
    public Resolution showJawabTawaranTunaiHaji () {
        haji = new Haji();
        pengguna = getContext().getCurrentUser();
        if (pengguna != null) {          
            haji.setNoKp(pengguna.getNoKp());
        }       
        return new JSP("haji/jawabtawaran/jawab_tawaran_haji.jsp");
    }
    
    /*
     * Use for GoBack button in page mahram_detail.jsp
     */
    @HandlesEvent("showTerimaTawaran")
    public Resolution showTerimaTawaran () {
      
        return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
    }
    
    /** comemnt at 2/6/2014 || 15082014
     * Newly add : mahram field
     * @return 
     */
    @HandlesEvent("HajjResp_Step2")
    public Resolution showDetailJawabTawaranTunaiHaji () {
        pengguna = getContext().getCurrentUser();
        if (pengguna != null) {          
            haji.setNoKp(pengguna.getNoKp());
        }
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());
        String responseCode = "";     
        
        try {
            deposit = getProfileDeposit(haji.getNoAkaun(), haji.getNoKp());
        } catch (ParseException ex) {
            java.util.logging.Logger.getLogger(HajiActionBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        if (deposit != null) {
            
            AccCheckUtil checking = ableContextListener.newInstance(AccCheckUtil.class);
            deposit.setNoKpDari(haji.getNoKp());
            deposit.setNoAkaunDari(haji.getNoAkaun());
            boolean check = checking.checkAcc(deposit, pengguna);

            if (!check) {
                addSimpleError("" + responseManager.getResponseMessage("9000", PROFILE_ENQ_MSG_ID));
                return new JSP("deposit/msg.jsp");
            }
        } else {
            addSimpleError("" + responseManager.getResponseMessage("9000", PROFILE_ENQ_MSG_ID));
                return new JSP("deposit/msg.jsp");
        }
        
        try {                  
            com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
            com.oas.thit._this.xsd.THISRequest req = new com.oas.thit._this.xsd.THISRequest();
            com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();
            req.setHeader( webUtil.createHeader(HAJJ_OFFR_ENQ_MSG_ID,HEADER_ID_ENQ) );
            THISBaseDataElementBody reqBody = objFactory.createTHISBaseDataElementBody();
            reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(haji.getNoAkaun()));
            reqBody.setTHICNo(objFactory.createTHISBaseDataElementBodyTHICNo(haji.getNoKp()));
            JAXBElement<THISBaseDataElementBody> jReqBody =  objFactory.createTHISRequestBody(reqBody);
            req.setBody(jReqBody);
           // com.oas.thit._this.offer.queryaccept.xsd.OfferQueryAcceptResponse result = port.hajjofferQuery(req);
            //update 10/12/13
            OfferQueryResponse result = port.hajjofferQuery(req);
            
            
            Header header = result.getHeader().getValue();
            responseCode = header.getResponseCode().getValue();
            if (responseCode.equals(SUCCESSFUL)) {
                
                OfferQueryAcceptResponseBody resp = result.getBody().getValue();
                OfferQueryResponseBody resp1 = result.getBody().getValue();
                
                    haji.setNoDaftar(resp.getTHRegNo().getValue().trim());
                    haji.setTahunTawaran(resp.getTHYear().getValue().trim());
                    haji.setTahunTawaranHijrah(resp.getTHYearI().getValue().trim());
                    haji.setAlamat1(resp.getTHAddress1().getValue().trim());
                    haji.setAlamat2(resp.getTHAddress2().getValue().trim());
                    haji.setAlamat3(resp.getTHAddress3().getValue().trim());
                    haji.setNama(resp.getTHName().getValue().trim());
                    haji.setNoAkaun(resp.getTHAcct().getValue().trim());
                    haji.setStatusTawaran(resp.getTHHajOfferStatus().getValue().trim());
                   
                   
                    //tambah maklumat mahram
                    
//                    if (resp1.getMahramName().getValue() != null){
//                     haji.setNamaMahram(resp1.getMahramName().getValue().trim());
//                    } else {
//                     haji.setNamaMahram("");
//                    }
                    
                    if (resp1.getMahramTHAcct().getValue() != null){
                     haji.setNoAkaunMahram(resp1.getMahramTHAcct().getValue().trim());
                    } else {
                     haji.setNoAkaunMahram("");
                    }
                   
                    if (resp1.getMahramICNO().getValue() != null){
                     haji.setNoKpMahram(resp1.getMahramICNO().getValue().trim());
                    } else {
                     haji.setNoKpMahram("");
                    }
                   
                    if (resp1.getMahramRelationship().getValue() != null){
                     haji.setHbgnMahram(kodHubunganDAO.findById(resp1.getMahramRelationship().getValue().trim()));
                    } else {
                     haji.setHbgnMahram(haji.getHbgnMahram());
                    }  
                        
                    if(resp.getTHPoskod().getValue()!=null){
                    Poskod poskod = poskodDAO.findById(resp.getTHPoskod().getValue().trim());
                        haji.setPoskod( poskod.getPoskod());
                        haji.setPoskodDeskripsi(poskod.getNama());
                    }
                    if ( resp != null && resp.getTHHajjStatus().getValue().trim().equals("")) { //BH not yet respond to the offer
                        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);  
                        if(permohonanMaklumat == null){
                            //fresh entry!!1st timer 
                            permohonanMaklumat = new PermohonanMaklumat();
                            permohonanMaklumat.setNoAkaun(resp.getTHAcct().getValue().trim());
                            permohonanMaklumat.setNoPengenalan(resp.getTHICNo().getValue().trim());
                            permohonanMaklumat.setNama(resp.getTHName().getValue().trim());
                            permohonanMaklumat.setIdKumpulanAsal(resp.getTHGroupRefNo().getValue().trim());
                            permohonanMaklumat.setAlamat1(resp.getTHAddress1().getValue().trim());
                            permohonanMaklumat.setAlamat2(resp.getTHAddress2().getValue().trim());
                            permohonanMaklumat.setAlamat3(resp.getTHAddress3().getValue().trim());
                            permohonanMaklumat.setNegeri(kodNegeriDAO.findById(resp.getTHState().getValue().trim()));
                            if(resp.getTHPoskod().getValue()!=null){
                                Poskod poskod = poskodDAO.findById(resp.getTHPoskod().getValue().trim());
                                permohonanMaklumat.setPoskod( poskod.getPoskod());
                                haji.setPoskodDeskripsi(poskod.getNama());
                            }
                            permohonanMaklumat.setNoTel1( resp.getTHPhoneHome().getValue().trim() ); 
                           // permohonanMaklumat.setNoTel2( resp.getTHPhoneOffice().getValue().trim() );
                            permohonanMaklumat.setNoTel3( resp.getTHPhoneMobile().getValue().trim() );
                            permohonanMaklumat.setEmel(resp.getTHemail().getValue().trim());
                            if(resp.getTHNationality().getValue()!=null && !resp.getTHNationality().getValue().trim().equals(""))
                                permohonanMaklumat.setWarganegara(kodWarganegaraDAO.findById(resp.getTHNationality().getValue().trim()));
                            permohonanMaklumat.setStatusHaji(kodStatusHajiDAO.findById(resp.getTHHajjStatus().getValue().trim()));
//                            permohonanMaklumat.setPekerjaan(kodPekerjaanDAO.findById(resp.getEmployType().getValue().trim()));
//                            permohonanMaklumat.setSektorPekerjaan(kodSektorPekerjaanDAO.findById(resp.getEmploySector().getValue().trim()));
                            permohonanMaklumat.setPerkahwinan(kodKahwinDAO.findById(resp.getTHMarital().getValue()));
                            permohonanMaklumat.setNoPendaftaran(resp.getTHRegNo().getValue());
                            permohonanMaklumat.setUrusan(kodUrusanDAO.findById(KOD_URUSAN_JAWAB));
                            permohonanMaklumat.setStatus(kodStatusDAO.findById(""));

                            ArrayList warisList = new ArrayList();
                            if(resp.getHeirName().getValue()!=null && resp.getHeirName().getValue().trim().length()>0){
                                PermohonanMaklumatWaris maklumatWaris = new PermohonanMaklumatWaris();
                                maklumatWaris.setPermohonan(permohonanMaklumat);
                                maklumatWaris.setInfoAudit(ia);
                                if (resp.getHeirName().getValue() != null){
                                    maklumatWaris.setNama(resp.getHeirName().getValue().trim());
                                } else {
                                    maklumatWaris.setNama("");
                                }
                                if (resp.getHeirTHAcct().getValue() != null){
                                    maklumatWaris.setNoAkaun(resp.getHeirTHAcct().getValue().trim());
                                } else {
                                    maklumatWaris.setNoAkaun("");
                                }
                                if (resp.getHeirICNo().getValue() != null){
                                    maklumatWaris.setNoKp(resp.getHeirICNo().getValue().trim()); // comemnt at 2/6/2014 || 15082014
                                } else {
                                    maklumatWaris.setNoKp("");
                                }
                                if (resp.getHeirAddress1().getValue() != null){
                                    maklumatWaris.setAlamat1(resp.getHeirAddress1().getValue().trim()); 
                                } else {
                                    maklumatWaris.setAlamat1("");
                                }
                                if (resp.getHeirAddress2().getValue() != null){
                                    maklumatWaris.setAlamat2(resp.getHeirAddress2().getValue().trim()); 
                                } else {
                                    maklumatWaris.setAlamat2("");
                                }
                                if (resp.getHeirAddress3().getValue() != null){
                                    maklumatWaris.setAlamat3(resp.getHeirAddress3().getValue().trim());
                                } else {
                                    maklumatWaris.setAlamat3("");
                                }
                                if (resp.getHeirPoskod().getValue() != null){
                                    maklumatWaris.setPoskod(resp.getHeirPoskod().getValue().trim());
                                } else {
                                    maklumatWaris.setPoskod("");
                                }
                                
                                if(resp.getHeirPoskod().getValue()!=null){
                                    Poskod poskod = poskodDAO.findById(resp.getHeirPoskod().getValue().trim());
                                    maklumatWaris.setPoskod( poskod.getPoskod());
                                    haji.setPoskodDeskripsiWaris(poskod.getNama());
                                }
                                if(resp.getHeirAddressState().getValue()!=null)
                                    maklumatWaris.setNegeri(kodNegeriDAO.findById(resp.getHeirAddressState().getValue().trim()));
                                maklumatWaris.setNoTel1(resp.getHeirPhoneHome().getValue().trim());
                                maklumatWaris.setNoTel2(resp.getHeirPhoneMobile().getValue().trim());
                                maklumatWaris.setNoTel3(resp.getHeirPhoneOffice().getValue().trim());
                                if(resp.getHeirRelationship().getValue()!=null)
                                    maklumatWaris.setHubungan(kodHubunganDAO.findById(resp.getHeirRelationship().getValue().trim()));                                
                                warisList.add(maklumatWaris);                               
                            }

                            permohonanMaklumat.setSenaraiMaklumatWaris(warisList);
                            
                            ArrayList kumpulanList = new ArrayList();                          
                            
                            List<Member> items = resp.getLineItems();
                            //Deleting Duplicate Records.
                            List l1 = new ArrayList();
                            List l2 = new ArrayList();
                            List<Member> r1 = new ArrayList();
                            for (int i = 0; i < items.size(); i++) {
                                l1.add(((Member) items.get(i)).getMemberTHAcct().getValue());
                                if (!(l2).contains((String) l1.get(i))) {
                                    l2.add(((Member) items.get(i)).getMemberTHAcct().getValue());
                                    r1.add((Member) items.get(i));
                                }
                            }
                            
                            if(r1!=null && r1.size()>0){
                                for ( Member item : r1 ) {
                                    PermohonanMaklumatKumpulan maklumatKumpulan =  new PermohonanMaklumatKumpulan();                    
                                    maklumatKumpulan.setIdMohonMaklumatKumpulan(null);
                                    maklumatKumpulan.setNama(item.getMemberName().getValue().trim());
                                    maklumatKumpulan.setNoAkaun(item.getMemberTHAcct().getValue().trim());
                                    maklumatKumpulan.setNoPengenalan(item.getMemberICNo().getValue().trim());
                                    if(item.getMemberHajStatus().getValue().trim()==null || item.getMemberHajStatus().getValue().trim().equals("")){
                                                String val = item.getMemberHajStatus().getValue().trim();
                                                if (StringUtils.isBlank(val)) {
                                                    val = "N";
                                                }
                                                maklumatKumpulan.setStatushaji(kodStatusHajiDAO.findById(val));
                                                }
                                    else{
                                    maklumatKumpulan.setStatushaji(kodStatusHajiDAO.findById(item.getMemberHajStatus().getValue().trim()));
                                    }      
                                    //Dont want to show relation at table when user want to join group, comment next line
                                    maklumatKumpulan.setHubungan(kodHubunganDAO.findById(item.getMemberRelationship().getValue().trim()));                                    
                                    maklumatKumpulan.setPermohonan(permohonanMaklumat);
                                    maklumatKumpulan.setId(resp.getTHGroupRefNo().getValue().trim());
                                    maklumatKumpulan.setStatusTambahan(STATUS_TAMBAHAN_WUJUD);
                                    maklumatKumpulan.setInfoAudit(ia);
                                    //maklumatKumpulan.setPermohonan(permohonanMaklumat);
                                    kumpulanList.add(maklumatKumpulan);    
                                }
                                PilihanDestinasi pd = new PilihanDestinasi();
                                pd.setInfoAudit(ia);
                                pd.setDestinasiPergi(StringUtils.isBlank(resp.getOriginCity().getValue()) ? "" :  resp.getOriginCity().getValue().trim());
                                pd.setDestinasiTiba(StringUtils.isBlank(resp.getDestinationCity().getValue()) ? "" :  resp.getDestinationCity().getValue().trim());
                                pd.setPermohonan(permohonanMaklumat);
                                List pdList = new ArrayList();
                                pdList.add(pd);
                                permohonanMaklumat.setSenaraiPilihanDestinasi(pdList);
                            }
                           permohonanMaklumat.setSenaraiMaklumatKumpulan(kumpulanList);
                        }
                        //to display waris details
                        if(permohonanMaklumat.getSenaraiMaklumatWaris()!=null && permohonanMaklumat.getSenaraiMaklumatWaris().size()>0){
                            PermohonanMaklumatWaris maklumatWaris = (PermohonanMaklumatWaris)permohonanMaklumat.getSenaraiMaklumatWaris().get(0);
                            haji.setNamaWaris(maklumatWaris.getNama());
                            haji.setNoKpWaris(maklumatWaris.getNoKp());
                            haji.setNoAkaunWaris(maklumatWaris.getNoAkaun());
                            haji.setAlamatWaris1(maklumatWaris.getAlamat1());
                            haji.setAlamatWaris2(maklumatWaris.getAlamat2());
                            haji.setAlamatWaris3(maklumatWaris.getAlamat3());
                            haji.setPoskodWaris(maklumatWaris.getPoskod());                            
                            haji.setNegeriWaris(maklumatWaris.getNegeri());
                            haji.setNoTel1waris(maklumatWaris.getNoTel1());
                            haji.setNoTel2waris(maklumatWaris.getNoTel2());
                            haji.setNoTel3waris(maklumatWaris.getNoTel3());
                            haji.setHubungan(maklumatWaris.getHubungan());
                         }                        
                        //init list(for acceptance)
                        haji.setSenaraiNegeri(listUtil.getSenaraiNegeri());
                        haji.setSenaraikahwin(listUtil.getSenaraiPerkahwinan());
                        haji.setSenaraiTahapPengajian(listUtil.getSenaraiTahapPengajian());
                        haji.setSenaraiWarganegara(listUtil.getSenaraiWarganegara());
                        haji.setSenaraisektorpekerjaan(listUtil.getSenaraiSektorPekerjaan());
                        haji.setSenaraipekerjaan(listUtil.getSenaraiPekerjaan());
                        haji.setSenaraiHubungan(listUtil.getSenaraiHubungan());
                        haji.setSenaraiHubunganMahram(listUtil.getSenaraiHubunganMahram());
                       
                        //get dob
                        haji.setTarikhLahir(deposit.getTarikhLahir());
                       
                        //get jantina
                        haji.setJantina(deposit.getJantina().getKod());
                        
                        haji.setMohonMaklumat(permohonanMaklumat);
                        getContext().getRequest().getSession().setAttribute("haji",haji);
                        
                        if(permohonanMaklumat.getStatusHaji()!=null && permohonanMaklumat.getStatusHaji().getKod().equals(KOD_STATUS_TERIMA)){
                            return new JSP("haji/jawabtawaran/terima_tawaran.jsp");
                        }else if(permohonanMaklumat.getStatusHaji()!=null && permohonanMaklumat.getStatusHaji().getKod().equals(KOD_STATUS_TOLAK)){          
                            return new JSP("haji/jawabtawaran/tolak_tawaran.jsp");
                        }else{
                            return new JSP("haji/jawabtawaran/jawab_tawaran_haji_detail.jsp"); 
                        }
                        
                    } else if (responseCode.equals(ALREADY_DECLINE_OFFER)) {
                        // TELAH MENOLAK TAWARAN
                          responseCode = ALREADY_DECLINE_OFFER;
                    } else if (responseCode.equals(OUTDATED_OFFER)) {
                         // "TAWARAN TUAN / PUAN TELAH TAMAT TEMPOH"
                          responseCode = OUTDATED_OFFER;
                    } else {
                          responseCode = ALREADY_RESPOND_OFFER;
                    }
                    //responseCode = ALREADY_RESPOND_OFFER;
            } 
                    
        } catch (Exception ex) {
            LOG.error(ex);
            responseCode = SYSTEM_ERROR;
        }
        addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_ENQ_MSG_ID));
        return new JSP("haji/msg.jsp");   
    }
            
    @HandlesEvent("HajjResp_Step3")
    public Resolution submitTolakTawaran() {        
        pengguna = getContext().getCurrentUser();
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());
        haji = (Haji)getContext().getRequest().getSession().getAttribute("haji");
        PermohonanMaklumat permohonanMaklumat = haji.getMohonMaklumat();
        permohonanMaklumat.setStatus(kodStatusDAO.findById(KOD_STATUS_TOLAK));
        haji.setSenaraiIslamicYear(listUtil.getIslamicYear());
        haji.setSenaraiAlasan(listUtil.getAlasan());
        permohonanMaklumat.setInfoAudit(ia);
        hajjManager.saveMohonMaklumat(permohonanMaklumat); 
        return new JSP("haji/jawabtawaran/tolak_tawaran.jsp");
    }
    
    @HandlesEvent("HajjResp_Step6")
    public Resolution tolakTawaran() {
        
            String responseCode = "";
            haji.setSenaraiIslamicYear(listUtil.getIslamicYear());
            SejarahTransaksi sejarahTransaksi = new SejarahTransaksi();
            
            AccCheckUtil checking = ableContextListener.newInstance(AccCheckUtil.class);
            deposit.setNoKpDari(deposit.getNoKp());
            deposit.setNoAkaunDari(deposit.getNoAkaun());
            boolean check = checking.checkAcc(deposit, pengguna);

            if (!check) {
                addSimpleError("" + responseManager.getResponseMessage("9000", PROFILE_ENQ_MSG_ID));
                return new JSP("deposit/msg.jsp");
            }
        
            try { // Call Web Service Operation
                com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
                com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
                // TODO initialize WS operation arguments here
                com.oas.thit._this.offer.decline.xsd.DeclineRequest req = new com.oas.thit._this.offer.decline.xsd.DeclineRequest();
                req.setHeader( webUtil.createHeader(OFFER_DECLINE_MSG_ID, HEADER_ID_TOLAK ) );
                com.oas.thit._this.offer.decline.xsd.ObjectFactory objFactory = new com.oas.thit._this.offer.decline.xsd.ObjectFactory();
                com.oas.thit._this.xsd.ObjectFactory _objFactory = new com.oas.thit._this.xsd.ObjectFactory();
                DeclineRequestBody reqBody = objFactory.createDeclineRequestBody();
                reqBody.setTHAcct(_objFactory.createTHISBaseDataElementBodyTHAcct(haji.getMohonMaklumat().getNoAkaun()));
                reqBody.setTHICNo(_objFactory.createTHISBaseDataElementBodyTHICNo(haji.getMohonMaklumat().getNoPengenalan()));
                reqBody.setReason(objFactory.createDeclineRequestBodyReason(haji.getAlasantolak()));
                if(haji.getAlasantolak().equals("")){
                    reqBody.setRemark(objFactory.createDeclineRequestBodyRemark(haji.getAlasanlain()));
                } else {
                    reqBody.setRemark(objFactory.createDeclineRequestBodyRemark(""));
                }
                reqBody.setTHHajYearI(objFactory.createDeclineRequestBodyTHHajYearI(haji.getTahunpilihanbaru()));
                JAXBElement<DeclineRequestBody> jReqBody = objFactory.createDeclineRequestBody(reqBody);
                req.setBody( jReqBody );
                // TODO process result here
                com.oas.thit._this.offer.decline.xsd.DeclineResponse result = port.hajjofferDecline(req);
                Header header = result.getHeader().getValue();
                responseCode = header.getResponseCode().getValue(); 
                sejarahTransaksi.setPengguna(pengguna);
                sejarahTransaksi.setTrhMasuk(new Date());
                sejarahTransaksi.setUrusan(kodUrusanDAO.findById(OFFER_DECLINE_MSG_ID));
                sejarahTransaksi.setIdSessi(getContext().getRequest().getSession().getId());
                sejarahTransaksi.setStatus(kodStatusDAO.findById(responseCode));
                sejarahTransaksi.setNilaiDalaman1(header.getTxid().getValue().trim());
                if (responseCode.equals(SUCCESSFUL)) {                 

                 haji = (Haji)getContext().getRequest().getSession().getAttribute("haji");
                    SuratTawaran suratTawaran = new SuratTawaran();
                    suratTawaran.setAlamat1(haji.getAlamat1());
                    suratTawaran.setAlamat2(haji.getAlamat2());
                    suratTawaran.setAlamat3(haji.getAlamat3());
                    suratTawaran.setNama(haji.getNama());
                    suratTawaran.setNoAkaun(haji.getNoAkaun());
                    suratTawaran.setNoPendaftaranHaji(haji.getNoDaftar());
                    suratTawaran.setPoskod(haji.getPoskod());
                    suratTawaran.setBandar(haji.getPoskodDeskripsi());
                    suratTawaran.setTahun(haji.getTahunTawaran());
                    suratTawaran.setTahunHijarah(haji.getTahunTawaranHijrah());
                    sejarahTransaksiManager.saveSejarahTransaksi(sejarahTransaksi);
                    getContext().getRequest().getSession().setAttribute("SuratTawaran",suratTawaran);
                    return new JSP("haji/jawabtawaran/decline_confirmation.jsp");
                } else {
                    addSimpleError(responseManager.getResponseMessage(responseCode, OFFER_DECLINE_MSG_ID));                
                }
            } catch (Exception ex) {
                LOG.error(ex);
                responseCode = SYSTEM_ERROR; 
                addSimpleError("" + responseManager.getResponseMessage(responseCode, OFFER_DECLINE_MSG_ID));
            }
            return new JSP("haji/msg.jsp");
    }
    
    @HandlesEvent("HajjResp_Step4")
    public Resolution submitTerimaTawaran() { 
        pengguna = getContext().getCurrentUser();
        
        //init list
        haji.setSenaraiNegeri(listUtil.getSenaraiNegeri());
        haji.setSenaraikahwin(listUtil.getSenaraiPerkahwinan());
        haji.setSenaraiTahapPengajian(listUtil.getSenaraiTahapPengajian());
        haji.setSenaraiWarganegara(listUtil.getSenaraiWarganegara());
        haji.setSenaraisektorpekerjaan(listUtil.getSenaraiSektorPekerjaan());
        haji.setSenaraipekerjaan(listUtil.getSenaraiPekerjaan());
        haji.setSenaraiHubungan(listUtil.getSenaraiHubungan());
        haji.setSenaraiHubunganMahram(listUtil.getSenaraiHubunganMahram());
        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());        
        haji = (Haji)getContext().getRequest().getSession().getAttribute("haji");
      
        PermohonanMaklumat permohonanMaklumat = haji.getMohonMaklumat();
        permohonanMaklumat.setStatusHaji(kodStatusHajiDAO.findById(KOD_STATUS_TERIMA));  
        
        permohonanMaklumat.setInfoAudit(ia);
                
        permohonanMaklumat = hajjManager.saveMohonMaklumat(permohonanMaklumat);
        haji.setMohonMaklumat(permohonanMaklumat); 
       
        getContext().getRequest().getSession().setAttribute("haji", haji);
        
        return new JSP("haji/jawabtawaran/terima_tawaran.jsp");
        
    }
    
    @HandlesEvent("HajjResp_Step5")
    public Resolution submitMaklumatPeribadi() {        
        context.getServletContext().setAttribute("save_count", new Integer(1));
        pengguna = getContext().getCurrentUser();
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date()); 
       // Haji hajiForm = (Haji)getContext().getRequest().getSession().getAttribute("haji");
        
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
        permohonanMaklumat.setInfoAudit(ia);
        
        permohonanMaklumat.setNoAkaun(haji.getNoAkaun());
        permohonanMaklumat.setNoPengenalan(pengguna.getNoKp());
        //do checking
        permohonanMaklumat.setAlamat1(haji.getMohonMaklumat().getAlamat1());
        permohonanMaklumat.setAlamat2(haji.getMohonMaklumat().getAlamat2());
        permohonanMaklumat.setAlamat3(haji.getMohonMaklumat().getAlamat3());
        //edit tuk potong value
        permohonanMaklumat.setPoskod(haji.getMohonMaklumat().getPoskod().substring(0, 5));
//        if (!(haji.getMohonMaklumat().getPoskod().equals(hajiForm.getMohonMaklumat().getPoskod()))) {
//            permohonanMaklumat.setPoskod(getContext().getRequest().getParameter("poskod1"));
//        }
        
        permohonanMaklumat.setNegeri(kodNegeriDAO.findById(haji.getMohonMaklumat().getNegeri().getCode()));
        permohonanMaklumat.setNoTel1(haji.getMohonMaklumat().getNoTel1());
        permohonanMaklumat.setNoTel2(haji.getMohonMaklumat().getNoTel2());
        permohonanMaklumat.setNoTel3(haji.getMohonMaklumat().getNoTel3());
        permohonanMaklumat.setNoFax(haji.getMohonMaklumat().getNoFax());
        permohonanMaklumat.setEmel(haji.getMohonMaklumat().getEmel());        
        permohonanMaklumat.setPerkahwinan(kodKahwinDAO.findById(haji.getMohonMaklumat().getPerkahwinan().getKod()));
        permohonanMaklumat.setWarganegara(kodWarganegaraDAO.findById(haji.getMohonMaklumat().getWarganegara().getKod()));
        permohonanMaklumat.setPendidikan(kodTahapPengajianDAO.findById(haji.getMohonMaklumat().getPendidikan().getKod()));
        permohonanMaklumat.setSektorPekerjaan(kodSektorPekerjaanDAO.findById(haji.getMohonMaklumat().getSektorPekerjaan().getKod()));
        //add jenis pekerjaan
        permohonanMaklumat.setPekerjaan(kodPekerjaanDAO.findById(haji.getMohonMaklumat().getPekerjaan().getKod()));
        permohonanMaklumat = hajjManager.saveMohonMaklumat(permohonanMaklumat);   
        haji.setTarikhLahir(haji.getTarikhLahir());
        haji.setJantina(haji.getJantina());
//        String responseCode = "";
//        SejarahTransaksi sejarahTransaksi = new SejarahTransaksi();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
 
        haji.setMohonMaklumat(permohonanMaklumat);
        
        getContext().getRequest().setAttribute("haji", haji);
        return new JSP("haji/jawabtawaran/terima_tawaran.jsp");
        //return new JSP("haji/jawabtawaran/terima_tawaran_waris.jsp");
    }   
    
    @HandlesEvent("showTerimaTawaranWaris")
    public Resolution showTerimaTawaranWaris () {
      
         pengguna = getContext().getCurrentUser();
        
        //init list
        haji.setSenaraiNegeri(listUtil.getSenaraiNegeri());
        haji.setSenaraikahwin(listUtil.getSenaraiPerkahwinan());
        haji.setSenaraiTahapPengajian(listUtil.getSenaraiTahapPengajian());
        haji.setSenaraiWarganegara(listUtil.getSenaraiWarganegara());
        haji.setSenaraisektorpekerjaan(listUtil.getSenaraiSektorPekerjaan());
        haji.setSenaraipekerjaan(listUtil.getSenaraiPekerjaan());
        haji.setSenaraiHubungan(listUtil.getSenaraiHubungan());
        haji.setSenaraiHubunganMahram(listUtil.getSenaraiHubunganMahram());
        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());        
        haji = (Haji)getContext().getRequest().getSession().getAttribute("haji");
      
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
       //PermohonanMaklumat permohonanMaklumat = haji.getMohonMaklumat();
        permohonanMaklumat.setStatusHaji(kodStatusHajiDAO.findById(KOD_STATUS_TERIMA));  
        
        permohonanMaklumat.setInfoAudit(ia);
                
        permohonanMaklumat = hajjManager.saveMohonMaklumat(permohonanMaklumat);
        haji.setMohonMaklumat(permohonanMaklumat); 
       
        getContext().getRequest().getSession().setAttribute("haji", haji);
        //add 30/12/2014
        context.getServletContext().setAttribute("save_count", new Integer(0));
        return new JSP("haji/jawabtawaran/terima_tawaran_waris.jsp");
    }
    
    @HandlesEvent("HajjResp_Step5a")
    public Resolution submitMaklumatWaris() {        
        context.getServletContext().setAttribute("save_count", new Integer(1));
        pengguna = getContext().getCurrentUser();
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());     
       // Haji hajiForm = (Haji)getContext().getRequest().getSession().getAttribute("haji");
        
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
        permohonanMaklumat.setInfoAudit(ia);
             
        //waris
        List maklumatWarisList = permohonanMaklumat.getSenaraiMaklumatWaris();
        PermohonanMaklumatWaris maklumatWaris = null;
        if(maklumatWarisList == null || maklumatWarisList.size()<=0){            
            maklumatWaris = new PermohonanMaklumatWaris();
            maklumatWarisList = new ArrayList();
        }else{
            maklumatWaris = (PermohonanMaklumatWaris)maklumatWarisList.get(0);
            maklumatWarisList.remove(maklumatWaris);
        }
        maklumatWaris.setInfoAudit(ia);
        maklumatWaris.setNoKp(haji.getNoKpWaris());
        maklumatWaris.setNama(haji.getNamaWaris());
        maklumatWaris.setAlamat1(haji.getAlamatWaris1());
        maklumatWaris.setAlamat2(haji.getAlamatWaris2());
        maklumatWaris.setAlamat3(haji.getAlamatWaris3());
        maklumatWaris.setNoAkaun(haji.getNoAkaunWaris());
        maklumatWaris.setNoTel1(haji.getNoTel1waris());
        maklumatWaris.setNoTel2(haji.getNoTel2waris());
        maklumatWaris.setNoTel3(haji.getNoTel3waris());
        maklumatWaris.setPoskod(haji.getPoskodWaris().substring(0, 5));
        //new added in
        maklumatWaris.setNoKp(haji.getNoKpWaris());
        maklumatWaris.setNegeri(kodNegeriDAO.findById(haji.getNegeriWaris().getCode()));
        maklumatWaris.setHubungan(kodHubunganDAO.findById(haji.getHubungan().getKod()));
        
        maklumatWaris.setPermohonan(permohonanMaklumat);        
        maklumatWarisList.add(maklumatWaris);
       // permohonanMaklumat.setSenaraiMaklumatWaris(maklumatWarisList);  
        
        if (haji.getNoKpWaris2()!= null) {
            //New CR - added 10/12/2014 - waris2
       PermohonanMaklumatWaris maklumatWaris2 = new PermohonanMaklumatWaris();
        maklumatWaris2.setInfoAudit(ia);
        maklumatWaris2.setNoKp(haji.getNoKpWaris2());
        maklumatWaris2.setNama(haji.getNamaWaris2());
        maklumatWaris2.setAlamat1(haji.getAlamatWaris1a());
        maklumatWaris2.setAlamat2(haji.getAlamatWaris2a());
        maklumatWaris2.setAlamat3(haji.getAlamatWaris3a());
        maklumatWaris2.setNoAkaun(haji.getNoAkaunWaris2());
        maklumatWaris2.setNoTel1(haji.getNoTel1waris2());
        maklumatWaris2.setNoTel2(haji.getNoTel2waris2());
        maklumatWaris2.setNoTel3(haji.getNoTel3waris2());
        maklumatWaris2.setPoskod(haji.getPoskodWaris4().substring(0, 5));
        maklumatWaris2.setNoAkaun(haji.getNoAkaunWaris2());
        maklumatWaris2.setNegeri(kodNegeriDAO.findById(haji.getNegeriWaris().getCode()));
        maklumatWaris2.setHubungan(kodHubunganDAO.findById(haji.getHubungan().getKod()));
        
        maklumatWaris2.setPermohonan(permohonanMaklumat);        
        maklumatWarisList.add(maklumatWaris2);
        
        }
            
        permohonanMaklumat.setSenaraiMaklumatWaris(maklumatWarisList);  
        permohonanMaklumat = hajjManager.saveMohonMaklumat(permohonanMaklumat);          
        haji.setMohonMaklumat(permohonanMaklumat);
        
        getContext().getRequest().setAttribute("haji", haji);
        return new JSP("haji/jawabtawaran/terima_tawaran_waris.jsp");
    }   

   /**
    *  comment for prod : 02/06/2014 || 15082014
     * 1. Check mahram inserted, (ISM)
     *  - Never go for haj
     *  - Have register for Haj
     *  - male
     *  - age > 18
     * 2.  kod keluarga sama ,
     *  if blank/null, add kod keluarga yg sama ngan ngan BH yg add
     *  else check same ke x ngan BJ, kalo tak sama, reject
     *  - pertalian
     * 
     * 3. return info to display
     * 
     * 
     * @return info mahram
     */
     @AuthRequired
   public Resolution checkMahram() {
 
         /* 
          * TODO : dapatkan respond dr ISM
          *   if 0000, get mahram's info
          *   else, return error message
         */
         String responseCode = "";
         PermohonanMaklumat permohonanMaklumat = null;
        
         int age = 0;
         
         try {
          
              com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
              com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
             // com.oas.thit._this.queryacct.xsd.QueryAccountRequest req = new com.oas.thit._this.queryacct.xsd.QueryAccountRequest();
              com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryRequest req = new com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryRequest();
              com.oas.thit._this.offer.mahram.xsd.ObjectFactory objFactory = new com.oas.thit._this.offer.mahram.xsd.ObjectFactory();

              req.setHeader(webUtil.createHeader(MAHRAM_ENQ_MSG_ID, HEADER_ID_MAHRAM_ENQUIRY));
              OfferMahramQueryRequestBody reqBody = objFactory.createOfferMahramQueryRequestBody();

              reqBody.setMahramICNo(objFactory.createOfferMahramQueryRequestBodyMahramICNo(haji.getNoKpMahram()));
              reqBody.setMahramTHAcct(objFactory.createOfferMahramQueryRequestBodyMahramTHAcct(haji.getNoAkaunMahram()));
              JAXBElement<OfferMahramQueryRequestBody> jReqBody = objFactory.createOfferMahramQueryRequestBody(reqBody);
              req.setBody(jReqBody);

            //  com.oas.thit._this.offer.mahram.xsd.OfferMahramQueryResponse result = port.hajjoffermahramQuery(req);
             // OfferQueryResponse result = port.hajjofferQuery(req);
              OfferMahramQueryResponse result = port.hajjoffermahramQuery(req);
              Header header = result.getHeader().getValue();
              responseCode = header.getResponseCode().getValue();


              if (responseCode.equals(SUCCESSFUL)) {
                    //get from result
                    OfferMahramQueryResponseBody resp = result.getBody().getValue();

                    permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);

                    haji.setNamaMahram(resp.getMahramName().getValue().trim());
                    haji.setNoAkaunMahram(resp.getMahramTHAcct().getValue().trim());
                    haji.setNoKpMahram(resp.getMahramICNo().getValue().trim());
                    haji.setDOBMahram(resp.getMahramDOB().getValue().trim());

//                    String kodKeluargaMahram = "";
//                    //get kod keluarga
//                    if (kodKeluargaMahram == null) {
//                        //Ok
//                    } else {
//                        /*Check if kodKeluarga Mahram equals kodKeluarga BH
//                         * if equal, reject
//                         */
//                        if (kodKeluargaMahram.equals(haji.getGroupRefNo())) {
//                        //add new response code in DB
//                          addSimpleError("" + responseManager.getResponseMessage(responseCode, "1234"));
//                          return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
//                        }
//                    }
                    //permohonanMaklumat.setHubunganMahram(haji.getHbgnMahram());
                    permohonanMaklumat.setHubunganMahram(kodHubunganDAO.findById(haji.getHbgnMahram().getKod()));
                    permohonanMaklumat.setNamaMahram(haji.getNamaMahram());
                    permohonanMaklumat.setNoAkaunMahram(haji.getNoAkaunMahram());
                    permohonanMaklumat.setNoKpMahram(haji.getNoKpMahram());
                    permohonanMaklumat.setDobMahram(haji.getDOBMahram());

                    haji.setSenaraiHubunganMahram(listUtil.getSenaraiHubunganMahram());
                    permohonanMaklumat = hajjManager.saveMohonMaklumat(permohonanMaklumat);
                    haji.setMohonMaklumat(permohonanMaklumat);
              } else if (responseCode.equals(MAHRAM_NOT_REG_HAJJ)) {
                  addSimpleError("" + responseManager.getResponseMessage(responseCode, MAHRAM_ENQ_MSG_ID));
                  return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
              } else if (responseCode.equals(MAHRAM_HAVE_PERFORM_HAJJ)) {
//                  /* Comment because field Jenis Jemaah is NOT ready 
//                   * Check Jenis Jemaah.
//                   * If Jenis Jemaah != MU - Muasasah, Mahram is Valid
//                   */
//                  
//                    //get from result
//                    OfferMahramQueryResponseBody resp = result.getBody().getValue();
//
//                    permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
//
//                    String jenisJemaah = "Jenis Jemaah";
//                    
//                    haji.setNamaMahram(resp.getMahramName().getValue().trim());
//                    haji.setNoAkaunMahram(resp.getMahramTHAcct().getValue().trim());
//                    haji.setNoKpMahram(resp.getMahramICNo().getValue().trim());
//                    haji.setDOBMahram(resp.getMahramDOB().getValue().trim());
//                    haji.setJenJemaahMahram(jenisJemaah);
//                    
//                    if (jenisJemaah.equalsIgnoreCase("MU")) {
//                        //not valid as Mahram
//                         addSimpleError("" + responseManager.getResponseMessage(responseCode, MAHRAM_ENQ_MSG_ID));
//                         return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
//                    } else {
//                        //valid as Mahram
//                        
//                        //permohonanMaklumat.setHubunganMahram(haji.getHbgnMahram());
//                        permohonanMaklumat.setHubunganMahram(kodHubunganDAO.findById(haji.getHbgnMahram().getKod()));
//                        permohonanMaklumat.setNamaMahram(haji.getNamaMahram());
//                        permohonanMaklumat.setNoAkaunMahram(haji.getNoAkaunMahram());
//                        permohonanMaklumat.setNoKpMahram(haji.getNoKpMahram());
//                        permohonanMaklumat.setDobMahram(haji.getDOBMahram());
//
//                        haji.setSenaraiHubunganMahram(listUtil.getSenaraiHubunganMahram());
//                        permohonanMaklumat = hajjManager.saveMohonMaklumat(permohonanMaklumat);
//                        haji.setMohonMaklumat(permohonanMaklumat);
//                        
//                        getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
//                        getContext().getRequest().setAttribute("haji", haji);
//                        return new JSP("haji/jawabtawaran/mahram_detail.jsp"); 
//                    }

                  addSimpleError("" + responseManager.getResponseMessage(responseCode, MAHRAM_ENQ_MSG_ID));
                  return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
              } else if (responseCode.equals(MAHRAM_WOMEN)) {
                  addSimpleError("" + responseManager.getResponseMessage(responseCode, MAHRAM_ENQ_MSG_ID));
                  return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
              }

         } catch (Exception ex) {
            LOG.error(ex);
            responseCode = SYSTEM_ERROR;
        }
        
        
        getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
        getContext().getRequest().setAttribute("haji", haji);
        return new JSP("haji/jawabtawaran/mahram_detail.jsp");  
    }
   
     /**
      * 1. Check jemaah if :
      *  - Female
      *  - age lebih kecil atau = 44
      *  - status kouta selain (P108, P109, P138)
      *  = Wajib masukkan mahram
      *  else 
      *  - go to pengkumpulan
      * @return 
      */
   @AuthRequired
   public Resolution showPengkumpulan () {
       
       context.getServletContext().setAttribute("save_count", new Integer(1));
       
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        String jantina = null;
        int age= 0;
        String statusKouta = "";
        String statusJemaah = "";
        String noAkaunMahram = haji.getNoAkaunMahram();
        String noKpMahram = haji.getNoKpMahram();
        
        try {
            deposit = getProfileDeposit(haji.getNoAkaun(), haji.getNoKp());
        } catch (ParseException ex) {
            java.util.logging.Logger.getLogger(HajiResponseActionBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        //1. get status kouta --status kouta x set lg
        statusKouta = haji.getStatusTawaran();
        
        if (deposit != null) {
            //2. get jantina
            KodJantina kodJantina = kodJantinaDAO.findById(deposit.getJantina().getKod());
            if (kodJantina.getKod() != null) {
                jantina = kodJantina.getNama();
            }

            //3. get DOB
            Date dob = deposit.getTarikhLahir();
            String DOB = sdf.format(dob);
            String df = new DateFormatDetector().getDateFormat(DOB);
            sdf = new SimpleDateFormat(df);
            Date today = new Date();
            age = util.getAge(DOB, sdf.format(today), df);
        }
        
        //initialize list
        haji.setSenaraiHubunganMahram(listUtil.getSenaraiHubunganMahram());
        
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
        PermohonanMaklumatKumpulan permohonanMaklumatKumpulan = hajjManager.findMohonMaklumatKumpulanByNoAkaun(haji.getNoAkaun());
        haji.setMaklumatKumpulan(permohonanMaklumatKumpulan);
        haji.setMohonMaklumat(permohonanMaklumat);

        //change - 10/07/2014 comment back on 14/7/2014
        //haji.setIdMaklumatKeluarga(Integer.parseInt(permohonanMaklumat.getIdKumpulanAsal()));
        
        if(permohonanMaklumat.getSenaraiPilihanDestinasi()!=null && permohonanMaklumat.getSenaraiPilihanDestinasi().size()>0){
            PilihanDestinasi pd = (PilihanDestinasi)permohonanMaklumat.getSenaraiPilihanDestinasi().get(0);
            haji.setDestinasiPergi(pd.getDestinasiPergi());
            haji.setDestinasiBalik(pd.getDestinasiTiba());
        }
        
        getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
        getContext().getRequest().getSession().setAttribute("haji",haji);
        
         //check based on P10x condition -- not use
//        if (statusKouta.equalsIgnoreCase("P108") || statusKouta.equalsIgnoreCase("P109") || statusKouta.equalsIgnoreCase("P138")) {
//            
//        } else {
        
        if (jantina == null) {
            if (noAkaunMahram != null && noKpMahram != null) {

                List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                if(maklumatKumpulanList != null && maklumatKumpulanList.size()>0){
                    PermohonanMaklumatKumpulan maklumatKumpulan =  (PermohonanMaklumatKumpulan)maklumatKumpulanList.get(0);
                    if(maklumatKumpulan.getStatusTambahan().equals(STATUS_TAMBAHAN_CIPTA)){                 
                        return new JSP("haji/jawabtawaran/wujud_kumpulan.jsp");         
                    }else{

                        //check if mahram's info exits and insert as group members
                        if (permohonanMaklumat.getNoAkaunMahram() != null) {

                          Kumpulan k = semakMahramKumpulan(permohonanMaklumat);

                          if (k != null) {
                            PermohonanMaklumatKumpulan maklumatKumpMahram = tambahMahramKeKumpulan(permohonanMaklumat);
                            if (maklumatKumpMahram != null){
                                maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                                if(maklumatKumpulanList == null)
                                    maklumatKumpulanList = new ArrayList();
                                maklumatKumpulanList.add(maklumatKumpMahram);        
                                permohonanMaklumat.setSenaraiMaklumatKumpulan(maklumatKumpulanList); 
                                getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
                            }
                          }

                        }

                        haji.setIdKumpulan(maklumatKumpulan.getId());
                        haji.setGroupRefNo(maklumatKumpulan.getId());
                        //comment 14/7/2014
                        //haji.setGroupRefNoNew("");
                        haji.setGroupRefNoNew(maklumatKumpulan.getId());
                        getContext().getRequest().getSession().setAttribute("haji",haji); //-- add on 14/7/2014
                        return new JSP("haji/jawabtawaran/kumpulan_tambah.jsp");
                    }
                }else{
                    haji.setGroupRefNoNew("");
                    getContext().getRequest().getSession().setAttribute("haji",haji);
                    return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");         
                }

            } else {
                getContext().getRequest().setAttribute("listHubungan",haji.getSenaraiHubunganMahram());
                getContext().getRequest().setAttribute("haji", haji);
                return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
            }
        } else {
            if (jantina.equalsIgnoreCase("PEREMPUAN")) {

                /*
                 * if age <= 44 need to add mahram info
                 */
                if (age <= 44) {
                    if (noAkaunMahram != null && noKpMahram != null) {
                        List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                        if(maklumatKumpulanList != null && maklumatKumpulanList.size()>0){
                            PermohonanMaklumatKumpulan maklumatKumpulan =  (PermohonanMaklumatKumpulan)maklumatKumpulanList.get(0);
                            if(maklumatKumpulan.getStatusTambahan().equals(STATUS_TAMBAHAN_CIPTA)){                 
                                return new JSP("haji/jawabtawaran/wujud_kumpulan.jsp");         
                            }else{
                                //check if mahram's info exits and insert as group members
                                if (permohonanMaklumat.getNoAkaunMahram() != null) {
                                  Kumpulan k = semakMahramKumpulan(permohonanMaklumat);
                                  if (k != null) {
                                    PermohonanMaklumatKumpulan maklumatKumpMahram = tambahMahramKeKumpulan(permohonanMaklumat);
                                    if (maklumatKumpMahram != null){
                                        maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                                        if(maklumatKumpulanList == null)
                                            maklumatKumpulanList = new ArrayList();
                                        maklumatKumpulanList.add(maklumatKumpMahram);        
                                        permohonanMaklumat.setSenaraiMaklumatKumpulan(maklumatKumpulanList); 
                                        getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
                                    }
                                  }
                                }

                                haji.setIdKumpulan(maklumatKumpulan.getId());
                                haji.setGroupRefNo(maklumatKumpulan.getId());
                                //comment 14/7/2014
                                //haji.setGroupRefNoNew("");
                                haji.setGroupRefNoNew(maklumatKumpulan.getId());
                                getContext().getRequest().getSession().setAttribute("haji",haji); //-- add on 14/7/2014
                                return new JSP("haji/jawabtawaran/kumpulan_tambah.jsp");
                            }
                        }else{
                            haji.setGroupRefNoNew("");
                            getContext().getRequest().getSession().setAttribute("haji",haji);
                            return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");         
                        }

                    } else {
                        getContext().getRequest().setAttribute("listHubungan",haji.getSenaraiHubunganMahram());
                        getContext().getRequest().setAttribute("haji", haji);
                        return new JSP("haji/jawabtawaran/mahram_tambah.jsp");
                    }

                } else {

                    List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                    if(maklumatKumpulanList != null && maklumatKumpulanList.size()>0){
                        PermohonanMaklumatKumpulan maklumatKumpulan =  (PermohonanMaklumatKumpulan)maklumatKumpulanList.get(0);
                        if(maklumatKumpulan.getStatusTambahan().equals(STATUS_TAMBAHAN_CIPTA)){                 
                            return new JSP("haji/jawabtawaran/wujud_kumpulan.jsp");         
                        }else{
                            //baru tambah
                            haji.setIdKumpulan(maklumatKumpulan.getId());
                            haji.setGroupRefNo(maklumatKumpulan.getId());
                            //comment 14/7/2014
                            //haji.setGroupRefNoNew("");
                            haji.setGroupRefNoNew(maklumatKumpulan.getId());
                            getContext().getRequest().getSession().setAttribute("haji",haji); //-- add on 14/7/2014
                            return new JSP("haji/jawabtawaran/kumpulan_tambah.jsp");
                        }
                    }else{
                         haji.setGroupRefNoNew("");
                        getContext().getRequest().getSession().setAttribute("haji",haji);
                        return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");         
                    }
                }

            } else { 
                List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                if(maklumatKumpulanList != null && maklumatKumpulanList.size()>0){
                    PermohonanMaklumatKumpulan maklumatKumpulan =  (PermohonanMaklumatKumpulan)maklumatKumpulanList.get(0);
                    if(maklumatKumpulan.getStatusTambahan().equals(STATUS_TAMBAHAN_CIPTA)){                 
                        return new JSP("haji/jawabtawaran/wujud_kumpulan.jsp");         
                    }else{
                        //baru tambah
                        haji.setIdKumpulan(maklumatKumpulan.getId());
                        haji.setGroupRefNo(maklumatKumpulan.getId());
                        //comment 14/7/2014
                        //haji.setGroupRefNoNew("");
                        haji.setGroupRefNoNew(maklumatKumpulan.getId());
                        getContext().getRequest().getSession().setAttribute("haji",haji); //-- add on 14/7/2014
                        return new JSP("haji/jawabtawaran/kumpulan_tambah.jsp");
                    }
                }else{
                    haji.setGroupRefNoNew("");
                    getContext().getRequest().getSession().setAttribute("haji",haji);
                    return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");         
                }
            } 
        }
        //} end check based on condition (P108)
       
    }
   
   @AuthRequired
   public Resolution kembali(){
     haji = (Haji)getContext().getRequest().getSession().getAttribute("haji");
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
        List maklumatKumpulanList =  permohonanMaklumat.getSenaraiMaklumatKumpulan(); 
        permohonanMaklumat.setSenaraiMaklumatKumpulan(null);
        if(maklumatKumpulanList!=null)
            hajjManager.deleteSenaraiMohonMaklumatKumpulan(maklumatKumpulanList);
        haji.setMohonMaklumat(permohonanMaklumat);
    return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");
   }
   
   
   
   @AuthRequired
   public Resolution removeKumpulan () {
        haji = (Haji)getContext().getRequest().getSession().getAttribute("haji");
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
        List maklumatKumpulanList =  permohonanMaklumat.getSenaraiMaklumatKumpulan(); 
        permohonanMaklumat.setSenaraiMaklumatKumpulan(null);
        if(maklumatKumpulanList!=null)
            hajjManager.deleteSenaraiMohonMaklumatKumpulan(maklumatKumpulanList);
        haji.setMohonMaklumat(permohonanMaklumat);
        return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");        
    }    
    
    @AuthRequired
    public Resolution showPopupTambahAhliKumpulan () {
       if(haji == null) 
            haji = new Haji();
       
       String noAkaunPenambah =  getContext().getRequest().getParameter("noAkaunPenambah");
        
       haji.setNoAkaunPenambah(noAkaunPenambah);
       return new JSP("/popup/haji/jawab/tambah_ahli_kumpulan.jsp");   
      
    } 
    
    @AuthRequired
    public Resolution showTambahAhliKumpulan () {
        String responseCode = "";        
        try {
            com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
            com.oas.thit._this.xsd.THISRequest req = new com.oas.thit._this.xsd.THISRequest();            
            
            com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();
            com.oas.thit.xmlmessage.xsd.ObjectFactory objHeader = new com.oas.thit.xmlmessage.xsd.ObjectFactory();
            
            Header reqHead = objHeader.createHeader();
            reqHead.setMsgId( objHeader.createHeaderMsgId(HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID));
            reqHead.setResponseCode( objHeader.createHeaderResponseCode(SUCCESSFUL) );
            reqHead.setTxid(objHeader.createHeaderTxid( webUtil.getHeaderID(HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID, HEADER_ID_OFFR_ACC_ADD_TO_GROUP_ENQ) ));
            
            JAXBElement<Header> jReqHead = objHeader.createEventHeader(reqHead);
            req.setHeader(jReqHead);
            
            THISBaseDataElementBody reqBody = objFactory.createTHISBaseDataElementBody();
            reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(haji.getNoAkaun()));
            
            JAXBElement<THISBaseDataElementBody> jReqBody =  objFactory.createTHISRequestBody(reqBody);
            req.setBody(jReqBody);           
            
            com.oas.thit._this.offer.group.xsd.AddToGroupQueryResponse result = port.hajjofferAddtoGroupQuery(req);
            
            Header header = result.getHeader().getValue();
            responseCode = header.getResponseCode().getValue();
            
            /*
             * Check : cannot add own account
             */
            String noAkaunPenambah = haji.getNoAkaunPenambah();
            
            String noAkaun = haji.getNoAkaun();
            
            
            if (responseCode.equals(SUCCESSFUL) || responseCode.equals(NOT_ADDED_TO_ANY_GROUP)) {
                
                if (noAkaunPenambah.equals(noAkaun)) {
                    addSimpleError("SILA MASUKKAN NO AKAUN LAIN. ");
                    return new JSP("/popup/haji/jawab/tambah_ahli_kumpulan.jsp");
                } else {
                    AddToGroupQueryResponseBody resp = result.getBody().getValue();                
                    kumpulan = new Kumpulan();
                    kumpulan.setNoAkaun(resp.getTHAcct().getValue());
                    kumpulan.setNoPengenalan(resp.getTHICNo().getValue().trim());
                    kumpulan.setNama(resp.getTHName().getValue().trim());
                    //newly add
                    String noKp = resp.getTHICNo().getValue().trim();
                    if(resp.getTHHajStatus().getValue().trim()==null || resp.getTHHajStatus().getValue().trim().equals("")){
                    String val = resp.getTHHajStatus().getValue().trim();
                    if (StringUtils.isBlank(val)) {
                        val = "N";
                    }
                    kumpulan.setStatushaji(kodStatusHajiDAO.findById(val));
                    }
                    else{
        //                kumpulan.setStatushaji(kodStatusHajiDAO.findById(resp.getTHHajStatus().getValue().trim()));
                       addSimpleError("AHLI SUDAH ADA KUMPULAN");
                       return new JSP("/popup/haji/jawab/tambah_ahli_kumpulan.jsp");
                    }
                    kumpulan.setSenaraiHubungan(kodHubunganDAO.findAll());
                    kumpulan.setNoAkaunPenambah(haji.getNoAkaunPenambah());
                    
                    //new add : get the jantina and send
                    String jantina = getJantina(noAkaun, noKp);
                    kumpulan.setSenaraiHubungan(listUtil.getSenaraiHubungan(jantina));
                    
                    //haji.setSenaraiHubungan(listUtil.getSenaraiHubungan(jantina));
                    getContext().getRequest().getSession().setAttribute("listHubungan",kumpulan.getSenaraiHubungan());
                    return new JSP("/popup/haji/jawab/senarai_ahli_kumpulan.jsp");
                }
                
            }
            addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID));
            
        } catch (Exception ex) {
            LOG.error(ex);
            responseCode = SYSTEM_ERROR;
            addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID)); 
        }          
        return new JSP("/popup/haji/jawab/tambah_ahli_kumpulan.jsp");
    }
    
   @AuthRequired
   public Resolution submitTambahAhliKumpulan () { 
       
        pengguna = getContext().getCurrentUser();        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date()); 
        
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(kumpulan.getNoAkaunPenambah(), KOD_URUSAN_JAWAB);
        PermohonanMaklumatKumpulan maklumatKumpulan = new PermohonanMaklumatKumpulan();        

        maklumatKumpulan.setPermohonan(permohonanMaklumat);
        maklumatKumpulan.setNoAkaun(kumpulan.getNoAkaun());
        maklumatKumpulan.setNoPengenalan(kumpulan.getNoPengenalan());
        maklumatKumpulan.setNama(kumpulan.getNama());
        maklumatKumpulan.setStatushaji(kodStatusHajiDAO.findById(kumpulan.getStatushaji().getKod()));      
        maklumatKumpulan.setHubungan(kodHubunganDAO.findById(kumpulan.getHubungan().getKod()));        
        maklumatKumpulan.setInfoAudit(ia);        
        maklumatKumpulan.setStatusTambahan(STATUS_TAMBAHAN_UBAH);
        /* 
         * set flag : 
         * so grp members where flag = 'Y', their data will be send to together when accepting the offer
         */
        maklumatKumpulan.setFlag("Y");
        PermohonanMaklumatKumpulan returnMaklumatKumpulan = hajjManager.saveMohonMaklumatKumpulan(maklumatKumpulan);       

        List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
        if(maklumatKumpulanList == null)
            maklumatKumpulanList = new ArrayList();
        maklumatKumpulanList.add(returnMaklumatKumpulan);        
        permohonanMaklumat.setSenaraiMaklumatKumpulan(maklumatKumpulanList); 
            
        getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
        //set Message if success, otherwise set message while throwing error
        getContext().getRequest().getSession().setAttribute("ReturnMessages", " Maklumat Anda Telah Berjaya Disimpan.");
        permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(kumpulan.getNoAkaunPenambah(), KOD_URUSAN_JAWAB);
        
        return new JSP("/popup/haji/jawab/senarai_ahli_kumpulan.jsp");    
    
    } 
    
    @AuthRequired
    public Resolution showPopupEditAhliKumpulan () {
        
       String id = getContext().getRequest().getParameter("idKumpulan");
       String jantina = "";
       
        PermohonanMaklumatKumpulan maklumatKumpulan = hajjManager.findMohonMaklumatKumpulanById(Integer.valueOf(id));
       
       if(maklumatKumpulan!=null){
            kumpulan = new Kumpulan();
            kumpulan.setIdMohonMaklumatKumpulan(maklumatKumpulan.getIdMohonMaklumatKumpulan());
            kumpulan.setNoAkaun(maklumatKumpulan.getNoAkaun());//hardcoded - for testing purpose
            kumpulan.setNoPengenalan(maklumatKumpulan.getNoPengenalan());
            kumpulan.setNama(maklumatKumpulan.getNama());
            kumpulan.setStatushaji(maklumatKumpulan.getStatushaji());
            kumpulan.setHubungan(maklumatKumpulan.getHubungan());
            kumpulan.setSenaraiHubungan(kodHubunganDAO.findAll()); 
       }  
       
       //new add : get the jantina and send
        jantina = getJantina(maklumatKumpulan.getNoAkaun(), maklumatKumpulan.getNoPengenalan());
        kumpulan.setSenaraiHubungan(listUtil.getSenaraiHubungan(jantina));
       getContext().getRequest().setAttribute("isEditMode", "true");
       getContext().getRequest().setAttribute("listHubungan", kumpulan.getSenaraiHubungan());
      // getContext().getRequest().setAttribute("jantina", jantina);
       return new JSP("/popup/haji/jawab/senarai_ahli_kumpulan.jsp");
    }
    
    
    @AuthRequired
    public Resolution saveEditAhliKumpulan() { 
        
        
        pengguna = getContext().getCurrentUser();
        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());        
     
        PermohonanMaklumatKumpulan maklumatKumpulan = hajjManager.findMohonMaklumatKumpulanByNoAkaun(kumpulan.getNoAkaun());
        
        maklumatKumpulan.setHubungan(kodHubunganDAO.findById(kumpulan.getHubungan().getKod()));       
        maklumatKumpulan.setInfoAudit(ia);
        /* 
         * set flag : 
         * so grp members where flag = 'Y', their data will be send to together when accepting the offer
         */
        maklumatKumpulan.setFlag("Y");
        hajjManager.saveMohonMaklumatKumpulan(maklumatKumpulan);        

        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatById(maklumatKumpulan.getPermohonan().getIdMohonMaklumat());

        //set Message if successfull, otherwise set message while throwing error
        getContext().getRequest().getSession().setAttribute("ReturnMessages", " Maklumat Anda Telah Berjaya Disimpan.");
        getContext().getRequest().getSession().setAttribute("hajjResGroupList", permohonanMaklumat);
        return new JSP("/popup/haji/jawab/senarai_ahli_kumpulan.jsp");  
       
    }
    
    
    @AuthRequired
    public Resolution deleteAhliKumpulan() { 
        
        pengguna = getContext().getCurrentUser();        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date());
        
        String id = getContext().getRequest().getParameter("idKumpulan"); 
        PermohonanMaklumatKumpulan maklumatKumpulan = hajjManager.findMohonMaklumatKumpulanById(Integer.valueOf(id));
         
        if(maklumatKumpulan!=null){
            maklumatKumpulan.setInfoAudit(ia);
            hajjManager.deleteMohonMaklumatKumpulan(maklumatKumpulan);
        }       
       
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatById(maklumatKumpulan.getPermohonan().getIdMohonMaklumat());   
        getContext().getRequest().getSession().setAttribute("hajjResGroupList", permohonanMaklumat);        
        //set Message if successfull, otherwise set message while throwing error
        getContext().getRequest().getSession().setAttribute("ReturnMessages", " Maklumat Anda Telah Berjaya Disimpan.");

        return new JSP("/haji/ajaxReturn.jsp");    
    }
    
    
     @AuthRequired
     public Resolution showWujudKumpulan(){
         
        PermohonanMaklumatKumpulan returnMaklumatKumpulan = null;
        pengguna = getContext().getCurrentUser();        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date()); 
        
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
        
        if (permohonanMaklumat != null) {
            PermohonanMaklumatKumpulan maklumatKumpulan = new PermohonanMaklumatKumpulan();
            maklumatKumpulan.setPermohonan(permohonanMaklumat);
            maklumatKumpulan.setNoAkaun(permohonanMaklumat.getNoAkaun());
            maklumatKumpulan.setNoPengenalan(permohonanMaklumat.getNoPengenalan());
            maklumatKumpulan.setNama(permohonanMaklumat.getNama());
            maklumatKumpulan.setStatushaji(permohonanMaklumat.getStatusHaji());      
            maklumatKumpulan.setHubungan(null); 
            //uncomment next line if dont want to show perhubungan in table
            maklumatKumpulan.setHubungan(permohonanMaklumat.getHubungan());    
            maklumatKumpulan.setInfoAudit(ia);        
            maklumatKumpulan.setStatusTambahan(STATUS_TAMBAHAN_CIPTA);
            
             //check if mahram's info exits and insert as group members
            if (permohonanMaklumat.getNoAkaunMahram() != null) {
               
              Kumpulan k = semakMahramKumpulan(permohonanMaklumat);
              
              if (k != null) {
                PermohonanMaklumatKumpulan maklumatKumpMahram = tambahMahramKeKumpulan(permohonanMaklumat);
                if (maklumatKumpMahram != null){
                    List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                    if(maklumatKumpulanList == null)
                        maklumatKumpulanList = new ArrayList();
                    maklumatKumpulanList.add(maklumatKumpMahram);        
                    permohonanMaklumat.setSenaraiMaklumatKumpulan(maklumatKumpulanList); 
                    getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
                }
              }
              
            }
            //returnMaklumatKumpulan = maklumatKumpulan;
            returnMaklumatKumpulan = hajjManager.saveMohonMaklumatKumpulan(maklumatKumpulan); 
            
        } else {
            PermohonanMaklumatKumpulan maklumatKumpulan = new PermohonanMaklumatKumpulan();
            maklumatKumpulan.setPermohonan(permohonanMaklumat);
            maklumatKumpulan.setNoAkaun(permohonanMaklumat.getNoAkaun());
            maklumatKumpulan.setNoPengenalan(permohonanMaklumat.getNoPengenalan());
            maklumatKumpulan.setNama(permohonanMaklumat.getNama());
            maklumatKumpulan.setStatushaji(permohonanMaklumat.getStatusHaji());      
            maklumatKumpulan.setHubungan(null);     
           // maklumatKumpulan.setHubungan(permohonanMaklumat.getHubungan());    
            maklumatKumpulan.setInfoAudit(ia);        
            maklumatKumpulan.setStatusTambahan(STATUS_TAMBAHAN_CIPTA);
            
            //check if mahram's info exits and insert as group members
            if (permohonanMaklumat.getNoAkaunMahram() != null) {
              Kumpulan k = semakMahramKumpulan(permohonanMaklumat);
              
              if (k != null) {
                PermohonanMaklumatKumpulan maklumatKumpMahram = tambahMahramKeKumpulan(permohonanMaklumat);
                if (maklumatKumpMahram != null){
                    List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                    if(maklumatKumpulanList == null)
                        maklumatKumpulanList = new ArrayList();
                    maklumatKumpulanList.add(maklumatKumpMahram);        
                    permohonanMaklumat.setSenaraiMaklumatKumpulan(maklumatKumpulanList); 
                    getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
                }
              }
            }
            //returnMaklumatKumpulan = hajjManager.saveMohonMaklumatKumpulan(maklumatKumpulan);   
        }
        
        List maklumatKumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
        if(maklumatKumpulanList == null)
            maklumatKumpulanList = new ArrayList();
        maklumatKumpulanList.add(returnMaklumatKumpulan);        
        permohonanMaklumat.setSenaraiMaklumatKumpulan(maklumatKumpulanList); 
        
        PermohonanMaklumat returnPermohonanMaklumat = hajjManager.saveMohonMaklumat(permohonanMaklumat);            
        getContext().getRequest().getSession().setAttribute("hajjResGroupList",returnPermohonanMaklumat);
        
        haji.setMohonMaklumat(returnPermohonanMaklumat);   
        return new JSP("haji/jawabtawaran/wujud_kumpulan.jsp");
        
    }
    
     
      
     @AuthRequired
     public Resolution showMasukKeKumpulan(){
        List maklumatKumpulanListMahram = null;
        pengguna = getContext().getCurrentUser();        
        InfoAudit ia = new InfoAudit();
        ia.setDimasukOleh(pengguna);
        ia.setTarikhMasuk(new Date()); 
        
        PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
        haji.setMohonMaklumat(permohonanMaklumat); 
        ArrayList kumpulanList = new ArrayList();
        
        String responseCode = "";
        try { 
            // Call Web Service Operation
            com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
            // TODO initialize WS operation arguments here
            com.oas.thit._this.queryacct.xsd.QueryAccountRequest req = new com.oas.thit._this.queryacct.xsd.QueryAccountRequest();
            req.setHeader( webUtil.createHeader(HAJJ_OFFR_QUERY_GROUP_MSG_ID, HEADER_ID_OFFR_QUERY_GROUP ) );
            // TODO process result here
            com.oas.thit._this.queryacct.xsd.ObjectFactory objFactory = new com.oas.thit._this.queryacct.xsd.ObjectFactory();
            QueryAccountRequestBody reqBody = objFactory.createQueryAccountRequestBody();                    
            reqBody.setTHAcct(objFactory.createQueryAccountRequestBodyTHAcct(haji.getNoAkaunAhliKumpulan()));                    
            JAXBElement<QueryAccountRequestBody> jReqBody = objFactory.createQueryAccountRequestBody(reqBody);
            req.setBody( jReqBody );

            com.oas.thit._this.offer.group.xsd.GroupQueryResponse result = port.hajjoffergroupQuery(req);

            Header header = result.getHeader().getValue();
            responseCode = header.getResponseCode().getValue();
           
            /*
             * haji.getNoAkaunAhliKumpulan(), set ke dlm request
             */
            if (responseCode.equals(SUCCESSFUL)) {
                GroupQueryResponseBody resp = result.getBody().getValue();
                
                if(resp!=null){
                    haji.setDestinasiBalik(resp.getDestinationCity().getValue().trim());
                    haji.setDestinasiPergi(resp.getOriginCity().getValue().trim());
                    //original
                    //haji.setGroupRefNo(resp.getTHGroupRefNo().getValue().trim());
                    haji.setGroupRefNo(permohonanMaklumat.getIdKumpulanAsal());
                    //set group Ref no new
                    haji.setGroupRefNoNew(resp.getTHGroupRefNo().getValue().trim());
                    /*
                     * newly add : to determine which member that user insert when he join group
                     * 
                     */
                    haji.setIdKumpulan(resp.getTHGroupRefNo().getValue());
                    
                    PilihanDestinasi pilihanDestinasi = new PilihanDestinasi();
                    pilihanDestinasi.setDestinasiPergi(haji.getDestinasiPergi());
                    pilihanDestinasi.setDestinasiTiba(haji.getDestinasiBalik());
                    pilihanDestinasi.setPermohonan(permohonanMaklumat);        
                    pilihanDestinasi.setInfoAudit(ia);
                    PermohonanMaklumatKumpulan maklumatKumpulan = null;
                   
                    //Deleting Duplicate Records
                    List<Member> items  = resp.getLineItems();
                    //--------------------
                    List l1=new ArrayList();
                    List l2=new ArrayList();
                    List<Member> r1=new ArrayList();
                    for(int i=0;i<items.size(); i++){
                        l1.add(((Member)items.get(i)).getMemberTHAcct().getValue());
                        if(!(l2).contains((String)l1.get(i))){
                            l2.add(((Member)items.get(i)).getMemberTHAcct().getValue());
                            r1.add((Member)items.get(i));
                        }
                    }
                    //--------------------
                    if(r1.size()>=10){
                    addSimpleError("KUMPULAN TELAH MENCUKUPI 10 ORANG");
                    return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");
                    }
                    
                    if(r1!=null && r1.size()>0){
                        for ( Member item : r1 ) {
                            
                            maklumatKumpulan = new PermohonanMaklumatKumpulan();
                           
                            //maklumatKumpulan.setIdMohonMaklumatKumpulan(null);
                            maklumatKumpulan.setNama(item.getMemberName().getValue().trim());
                            maklumatKumpulan.setNoAkaun(item.getMemberTHAcct().getValue().trim());
                            maklumatKumpulan.setNoPengenalan(item.getMemberICNo().getValue().trim());
                            if(item.getMemberHajStatus().getValue().trim()==null || item.getMemberHajStatus().getValue().trim().equals("")){
                                    String val = item.getMemberHajStatus().getValue().trim();
                                    if (StringUtils.isBlank(val)) {
                                        val = "N";
                                    }
                                maklumatKumpulan.setStatushaji(kodStatusHajiDAO.findById(val));
                            }
                            else{
                                maklumatKumpulan.setStatushaji(kodStatusHajiDAO.findById(item.getMemberHajStatus().getValue().trim()));
                            }  
                            //change 29/5/2013 
                            if(item.getMemberTHAcct().getValue().trim().equals(haji.getNoAkaunAhliKumpulan())){                                    
                               // maklumatKumpulan.setHubungan(kodHubunganDAO.findById(item.getMemberRelationship().getValue().trim()));
                            } 
                            
                           //change 27/06/2013
                           //maklumatKumpulan.setHubungan(kodHubunganDAO.findById(item.getMemberRelationship().getValue().trim()));

                            //original
                            maklumatKumpulan.setId(resp.getTHGroupRefNo().getValue().trim());
                            maklumatKumpulan.setStatusTambahan(STATUS_TAMBAHAN_WUJUD);
                            maklumatKumpulan.setInfoAudit(ia);
                            maklumatKumpulan.setPermohonan(permohonanMaklumat);
                            //maklumatKumpulan.setPermohonan(permohonanMaklumat.getIdMohonMaklumat().);
                            kumpulanList.add(maklumatKumpulan);
                          }  
                    }
                    //own record
                    maklumatKumpulan = new PermohonanMaklumatKumpulan();
                    maklumatKumpulan.setPermohonan(permohonanMaklumat);                    
                    //maklumatKumpulan.setIdMohonMaklumatKumpulan(null);
                    maklumatKumpulan.setNama(permohonanMaklumat.getNama());
                    maklumatKumpulan.setNoAkaun(permohonanMaklumat.getNoAkaun());
                    maklumatKumpulan.setNoPengenalan(permohonanMaklumat.getNoPengenalan());
                    maklumatKumpulan.setStatushaji(permohonanMaklumat.getStatusHaji());
                    //maklumatKumpulan.setHubungan(null);
                    maklumatKumpulan.setId(resp.getTHGroupRefNo().getValue().trim());
                    //maklumatKumpulan.setId(permohonanMaklumat.getIdMohonMaklumat().toString());
                    maklumatKumpulan.setStatusTambahan(STATUS_TAMBAHAN_WUJUD);
                    maklumatKumpulan.setInfoAudit(ia);
                    kumpulanList.add(maklumatKumpulan);
                    
                    //set mahram record if any
                    //check if mahram's info exits and insert as group members
                     if (permohonanMaklumat.getNoAkaunMahram() != null) {
                        Kumpulan k = semakMahramKumpulan(permohonanMaklumat);

                        if (k != null) {
                          PermohonanMaklumatKumpulan maklumatKumpMahram = tambahMahramKeKumpulan(permohonanMaklumat);
                          if (maklumatKumpMahram != null){
                              maklumatKumpMahram.setId(resp.getTHGroupRefNo().getValue().trim());
                              maklumatKumpulanListMahram = permohonanMaklumat.getSenaraiMaklumatKumpulan();
                              if(maklumatKumpulanListMahram == null)
                                  maklumatKumpulanListMahram = new ArrayList();
                             // maklumatKumpulanListMahram.add(maklumatKumpMahram);
                              kumpulanList.add(maklumatKumpMahram);
                             // permohonanMaklumat.setSenaraiMaklumatKumpulan(maklumatKumpulanListMahram); 
                              //getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
                             // hajjManager.saveMohonMaklumatKumpulan(maklumatKumpMahram);
                          }
                        }
                      }
                       
                    //------------------------

                     
                    //before set, set dl no id mohon maklumat
                    permohonanMaklumat.setSenaraiMaklumatKumpulan(kumpulanList);
                    hajjManager.saveMohonMaklumatKumpulan(kumpulanList, pilihanDestinasi);
                    
                    //set own record to haji model - use to display the info if succesfull
                    haji.setAlamat1(permohonanMaklumat.getAlamat1());
                    haji.setAlamat2(permohonanMaklumat.getAlamat2());
                    haji.setPoskod(permohonanMaklumat.getPoskod());
                    haji.setNoAkaun(permohonanMaklumat.getNoAkaun());
                    haji.setNoDaftar(permohonanMaklumat.getNoPendaftaran());
                    haji.setMohonMaklumat(permohonanMaklumat);    
                    PermohonanMaklumat returnPermohonanMaklumat = hajjManager.findMohonMaklumatById(permohonanMaklumat.getIdMohonMaklumat());
                    getContext().getRequest().getSession().setAttribute("hajjResGroupList",returnPermohonanMaklumat);
                    getContext().getRequest().getSession().setAttribute("haji",haji);
                    
                    return new JSP("haji/jawabtawaran/kumpulan_tambah.jsp"); 
                }
           }  else if (responseCode.equals(SYSTEM_ERROR)) {
               /**
                * no record in HJTerpilih :
                * Ahli Kumpulan yang dimasukkn belum menjawab tawaran, so no rekod in Hjterpilih
                */
               addSimpleError("AHLI KUMPULAN YANG ANDA MASUKKAN MASIH BELUM MENJAWAB TAWARAN HAJI. SILA MASUKKAN NO AKAUN LAIN. ");
               return new JSP("haji/jawabtawaran/kumpulan_baru.jsp"); 
           }
//            //if group dah ade KT
//            else if(responseCode.equals(GROUP_HAS_KT)) {
//                
//            addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_QUERY_GROUP_MSG_ID));
//            return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");  
//            }

        } catch (Exception ex) {
            //exception
            LOG.error(ex); 
            return new JSP("haji/msg.jsp"); 
        }
        addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_QUERY_GROUP_MSG_ID));
        return new JSP("haji/jawabtawaran/kumpulan_baru.jsp");  
        
     }
     
     @AuthRequired
     public Resolution savePilihanDestinasi(){
           pengguna = getContext().getCurrentUser();
            InfoAudit ia = new InfoAudit();
            
            String mohonMaklumatId = "";
            if(getContext().getRequest().getParameter("mohonMaklumatId")!=null){                
                mohonMaklumatId = getContext().getRequest().getParameter("mohonMaklumatId");
            }

            PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatById(Integer.valueOf(mohonMaklumatId));
            PilihanDestinasi pilihanDestinasi = null;
            if(hajjManager.findPilihanDestinasiByMohonMaklumatId(Integer.valueOf(mohonMaklumatId)) != null){
                pilihanDestinasi = hajjManager.findPilihanDestinasiByMohonMaklumatId(Integer.valueOf(mohonMaklumatId));
                ia.setDimasukOleh(pengguna);
                ia.setTarikhMasuk(new Date()); 
            }else{
                pilihanDestinasi = new PilihanDestinasi();
                ia.setDimasukOleh(pengguna);
                ia.setTarikhMasuk(new Date()); 
            }            
            String lapanganTerbanag = getContext().getRequest().getParameter("origin");
            pilihanDestinasi.setDestinasiPergi(lapanganTerbanag);            
            String Destinasi = getContext().getRequest().getParameter("destination");
            pilihanDestinasi.setDestinasiTiba(Destinasi);            
            pilihanDestinasi.setPermohonan(permohonanMaklumat);
            pilihanDestinasi.setInfoAudit(ia);
            
            hajjManager.savePilihanDestinasi(pilihanDestinasi);
     
       return new JSP("/haji/ajaxReturn.jsp");  
     } 
   
    /** comment 2//6/2014
     * TODO : send data mahram
     *        set mahram dalam group 
     * @return 
     */    
     @HandlesEvent("HajjResp_Step7")
    public Resolution terimaTawaran()
    {
       String responseCode = "";
       SejarahTransaksi sejarahTransaksi = new SejarahTransaksi();
       PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
       
       haji = (Haji)getContext().getRequest().getSession().getAttribute("haji");
       
        try { 
            // Call Web Service Operation
            com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
            
            /* TODO initialize WS operation arguments here
             * Hajj Offer Acceptance
             */
            com.oas.thit._this.offer.queryaccept.xsd.OfferAcceptRequest req = new com.oas.thit._this.offer.queryaccept.xsd.OfferAcceptRequest();
            req.setHeader( webUtil.createHeader(HAJJ_OFFR_ACCP_SUBMIT_MSG_ID, HEADER_ID_OFFR_ACCP_MSG_ID ) );
            
            com.oas.thit._this.offer.queryaccept.xsd.ObjectFactory objFactory = new com.oas.thit._this.offer.queryaccept.xsd.ObjectFactory();
            com.oas.thit._this.xsd.ObjectFactory _objFactory = new com.oas.thit._this.xsd.ObjectFactory();
            
            
             
            /**
             * validation untuk hubungan
             * if user tak masukkan hubungan untuk semua/salah satu ahli group, return error message
             */
            //===============================================================================================================
            List groupInfo = permohonanMaklumat.getSenaraiMaklumatKumpulan();
            if(groupInfo!=null){
                    for(int i=0; i<groupInfo.size(); i++){
                        PermohonanMaklumatKumpulan maklumatKumpulan = (PermohonanMaklumatKumpulan)groupInfo.get(i);
                        
                        /**
                         * Check maklumatKumpulan List
                         *if hubungan x sama ngan sendiri && blank , return error.
                         */
                            
                          if (!permohonanMaklumat.getNoPengenalan().trim().equals(maklumatKumpulan.getNoPengenalan().trim())) {
                                
                            if (maklumatKumpulan.getHubungan() == null){
                                 getContext().getRequest().getSession().setAttribute("pindaSenarai", "true");                
                                 if(haji==null)
                                     haji = new Haji();                
                                 if(permohonanMaklumat.getSenaraiPilihanDestinasi()!=null && permohonanMaklumat.getSenaraiPilihanDestinasi().size()>0){
                                     PilihanDestinasi pd = (PilihanDestinasi)permohonanMaklumat.getSenaraiPilihanDestinasi().get(0);
                                     haji.setDestinasiPergi(pd.getDestinasiPergi());
                                     haji.setDestinasiBalik(pd.getDestinasiTiba());
                                 }                

                                 haji.setMohonMaklumat(permohonanMaklumat);
                                 getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
                               
                                 addSimpleError("Sila Masukkan Hubungan Untuk Setiap Ahli Kumpulan.");

                                     return new JSP("haji/jawabtawaran/kumpulan_tambah.jsp");
                            }

                       }
                    } 
                }
            //===============================================================================================================
            
            
            
            //setdata
            //set data into reqbody  
            //===============================================================================================================
            OfferAcceptRequestBody reqBody = objFactory.createOfferAcceptRequestBody();
            com.oas.thit._this.hajj.group.xsd.ObjectFactory memberObjFactory = new com.oas.thit._this.hajj.group.xsd.ObjectFactory();

            // set own record            
            reqBody.setTHAcct(_objFactory.createTHISBaseDataElementBodyTHAcct(permohonanMaklumat.getNoAkaun()));
            reqBody.setTHICNo(_objFactory.createTHISBaseDataElementBodyTHICNo(permohonanMaklumat.getNoPengenalan()));
            
            // group reff number
            reqBody.setTHGroupRefNo(objFactory.createOfferQueryAcceptResponseBodyTHGroupRefNo(permohonanMaklumat.getIdKumpulanAsal())); 
            //
            reqBody.setTHGroupRefNoNew(objFactory.createOfferAcceptRequestBodyTHGroupRefNoNew(haji.getGroupRefNoNew()));
            
            reqBody.setTHName(objFactory.createOfferAcceptRequestBodyTHName(permohonanMaklumat.getNama()));
            reqBody.setTHAddress1(objFactory.createOfferAcceptRequestBodyTHAddress1(permohonanMaklumat.getAlamat1()));
            reqBody.setTHAddress2(objFactory.createOfferAcceptRequestBodyTHAddress2(permohonanMaklumat.getAlamat2()));
            reqBody.setTHAddress3(objFactory.createOfferAcceptRequestBodyTHAddress3(permohonanMaklumat.getAlamat3()));
            reqBody.setTHFax(objFactory.createOfferAcceptRequestBodyTHFax(permohonanMaklumat.getNoFax()));
            reqBody.setTHHajOfferStatus(objFactory.createOfferAcceptRequestBodyTHHajOfferStatus(permohonanMaklumat.getStatusHaji().getKod()));

            //TODO to check with OAS wether we need these field or not
            reqBody.setTHRegNo(objFactory.createOfferAcceptRequestBodyTHRegNo(permohonanMaklumat.getNoPendaftaran()));            
//            reqBody.setTHHajYear(objFactory.createOfferAcceptRequestBodyTHHajYear(""));
//            reqBody.setTHHajYearI(objFactory.createOfferQueryAcceptResponseBodyTHYearI(""));
            
            reqBody.setMarital(objFactory.createOfferAcceptRequestBodyMarital(permohonanMaklumat.getPerkahwinan().getKod()));
            if(permohonanMaklumat.getSenaraiPilihanDestinasi()!=null && permohonanMaklumat.getSenaraiPilihanDestinasi().size()>0){
                PilihanDestinasi pd = (PilihanDestinasi)permohonanMaklumat.getSenaraiPilihanDestinasi().get(0);
                reqBody.setOriginCity(objFactory.createOfferAcceptRequestBodyOriginCity(pd.getDestinasiPergi()));
                reqBody.setDestinationCity(objFactory.createOfferAcceptRequestBodyDestinationCity(pd.getDestinasiTiba()));
            }
            reqBody.setTHNationality(objFactory.createOfferAcceptRequestBodyTHNationality(permohonanMaklumat.getWarganegara().getKod()));
            reqBody.setOriginCountry(objFactory.createOfferAcceptRequestBodyOriginCountry(permohonanMaklumat.getWarganegara().getKod()));
            reqBody.setTHPhoneHome(objFactory.createOfferAcceptRequestBodyTHPhoneHome(permohonanMaklumat.getNoTel1()));
            reqBody.setTHPhoneMobile(objFactory.createOfferAcceptRequestBodyTHPhoneMobile(permohonanMaklumat.getNoTel3()));
            reqBody.setTHPoskod(objFactory.createOfferAcceptRequestBodyTHPoskod(permohonanMaklumat.getPoskod()));
            reqBody.setTHState(objFactory.createOfferAcceptRequestBodyTHState(permohonanMaklumat.getNegeri().getCode()));
            //added in 5/10/2014 
            //comment to deploy to prod - 11/8/2015
//            reqBody.setTHPhoneOffice(objFactory.createOfferAcceptRequestBodyHeir2PhoneOffice(permohonanMaklumat.getNoTel2()));
//            reqBody.setEducationLevel(objFactory.createOfferAcceptRequestBodyEducationLevel(permohonanMaklumat.getPendidikan().getKod()));
//            reqBody.setTHEmployType(objFactory.createOfferAcceptRequestBodyTHEmployType(permohonanMaklumat.getPekerjaan().getKod()));
//            reqBody.setTHEmploySector(objFactory.createOfferAcceptRequestBodyTHEmploySector(permohonanMaklumat.getSektorPekerjaan().getKod()));

            //
            reqBody.setTHemail(objFactory.createOfferQueryAcceptResponseBodyTHemail(permohonanMaklumat.getEmel()));

            //------------------
            //set maklumat mahram
            /**
             * 1. No akaun mahram 
             * 2. No KP Mahram 
             * 3. Pertalian Mahram 
             * 
             */
            //comment on 15/08/2014 uncomment 12/12/2014
            if (permohonanMaklumat.getNoKpMahram() != null) {
                reqBody.setMahramICNO(objFactory.createOfferAcceptRequestBodyMahramICNO(permohonanMaklumat.getNoKpMahram()));
                reqBody.setMahramTHAcct(objFactory.createOfferAcceptRequestBodyMahramTHAcct(permohonanMaklumat.getNoAkaunMahram()));
                reqBody.setMahramRelationship(objFactory.createOfferAcceptRequestBodyMahramRelationship(permohonanMaklumat.getHubunganMahram().getKod()));
            }
            //-----------------
//            List<PermohonanMaklumatWaris> mWaris = permohonanMaklumat.getSenaraiMaklumatWaris();
//            
//            if (mWaris != null) {
//                for(int i=0; i<mWaris.size(); i++){
//                
//                }
//            }
            //set heir record
            if(permohonanMaklumat.getSenaraiMaklumatWaris()!=null && permohonanMaklumat.getSenaraiMaklumatWaris().size()>0){
                
      
                PermohonanMaklumatWaris mw = (PermohonanMaklumatWaris)permohonanMaklumat.getSenaraiMaklumatWaris().get(0);
                reqBody.setHeirName(objFactory.createOfferAcceptRequestBodyHeirName(mw.getNama()));
                reqBody.setHeirAddress1(objFactory.createOfferAcceptRequestBodyHeirAddress1(mw.getAlamat1()));
                reqBody.setHeirAddress2(objFactory.createOfferAcceptRequestBodyHeirAddress2(mw.getAlamat2()));
                reqBody.setHeirAddress3(objFactory.createOfferAcceptRequestBodyHeirAddress3(mw.getAlamat3()));
                reqBody.setHeirAddressState(objFactory.createOfferAcceptRequestBodyHeirAddressState(mw.getNegeri().getCode()));
                reqBody.setHeirPhoneHome(objFactory.createOfferAcceptRequestBodyHeirPhoneHome(mw.getNoTel1()));
                reqBody.setHeirPhoneOffice(objFactory.createOfferAcceptRequestBodyHeirPhoneOffice(mw.getNoTel2()));
                reqBody.setHeirPhoneMobile(objFactory.createOfferAcceptRequestBodyHeirPhoneMobile(mw.getNoTel3()));
                reqBody.setHeirPoskod(objFactory.createOfferAcceptRequestBodyHeirPoskod(mw.getPoskod()));
                reqBody.setHeirTHAcct(objFactory.createOfferAcceptRequestBodyHeirTHAcct(mw.getNoAkaun()));
                reqBody.setHeirRelationship(objFactory.createOfferAcceptRequestBodyHeirRelationship(mw.getHubungan().getKod()));
                //newly added in
                //Comment on 15082014 - uncomment 18112014
                reqBody.setHeirICNo(objFactory.createOfferAcceptRequestBodyHeirICNo(mw.getNoKp()));
                
                //added in 8/12/2014
                //comment to deploy to prod - 11/8/2015 
                //start
//                if (permohonanMaklumat.getSenaraiMaklumatWaris().size()>1) {
//                
//                    PermohonanMaklumatWaris mw2 = (PermohonanMaklumatWaris)permohonanMaklumat.getSenaraiMaklumatWaris().get(1);
//                    reqBody.setHeir2Name(objFactory.createOfferAcceptRequestBodyHeir2Name(mw2.getNama()));
//                    reqBody.setHeir2Address1(objFactory.createOfferAcceptRequestBodyHeir2Address1(mw2.getAlamat1()));
//                    reqBody.setHeir2Address2(objFactory.createOfferAcceptRequestBodyHeir2Address2(mw2.getAlamat2()));
//                    reqBody.setHeir2Address3(objFactory.createOfferAcceptRequestBodyHeir2Address3(mw2.getAlamat3()));
//                    reqBody.setHeir2AddressState(objFactory.createOfferAcceptRequestBodyHeir2AddressState(mw2.getNegeri().getCode()));
//                    reqBody.setHeir2PhoneHome(objFactory.createOfferAcceptRequestBodyHeir2PhoneHome(mw2.getNoTel1()));
//                    reqBody.setHeir2PhoneOffice(objFactory.createOfferAcceptRequestBodyHeir2PhoneOffice(mw2.getNoTel2()));
//                    reqBody.setHeir2PhoneMobile(objFactory.createOfferAcceptRequestBodyHeir2PhoneMobile(mw2.getNoTel3()));
//                    reqBody.setHeir2Poskod(objFactory.createOfferAcceptRequestBodyHeir2Poskod(mw2.getPoskod()));
//                    reqBody.setHeir2Relationship(objFactory.createOfferAcceptRequestBodyHeir2Relationship(mw2.getHubungan().getKod()));
//                    reqBody.setHeir2ICNo(objFactory.createOfferAcceptRequestBodyHeirICNo(mw2.getNoKp()));
//                }
                //end
                
                
            }
            
            //---------
            /*
             * : Set group member :
             * list of group members
             * 
             * if single record, x payah hantar member
             * bwk member, hantar member yg ade relationship sahaja
             * 
             * If nak create group br.

                    THGroup : null
                    THGroupNew :  null

             */
            
            List kumpulanList = permohonanMaklumat.getSenaraiMaklumatKumpulan();
            
             if(kumpulanList!=null){
                for(int i=0; i<kumpulanList.size(); i++){
                    PermohonanMaklumatKumpulan maklumatKumpulan = (PermohonanMaklumatKumpulan)kumpulanList.get(i);
                   //if ade member/ bukan single rekod 
                   if(!(permohonanMaklumat.getNoPengenalan().trim().equals(maklumatKumpulan.getNoPengenalan().trim())))
                   {
                       //check status flag if = y br set member and hantar
                       if (maklumatKumpulan.getFlag() != null && maklumatKumpulan.getFlag().equals("Y")) {
                           if(i==0) {
                               reqBody.setTHGroupRefNoNew(objFactory.createOfferAcceptRequestBodyTHGroupRefNoNew(maklumatKumpulan.getId()));
                                 //reqBody.setTHGroupRefNoNew(objFactory.createOfferAcceptRequestBodyTHGroupRefNo(maklumatKumpulan.getId()));
                           }

                        //info of group member
                        Member memberObj = new Member();
                        memberObj.setMemberHajStatus(memberObjFactory.createMemberMemberHajStatus(maklumatKumpulan.getStatushaji().getKod()));
                        memberObj.setMemberICNo(memberObjFactory.createMemberMemberICNo(maklumatKumpulan.getNoPengenalan()));
                        memberObj.setMemberName(memberObjFactory.createMemberMemberName(maklumatKumpulan.getNama()));
                        
                        if(maklumatKumpulan.getHubungan()!=null && maklumatKumpulan.getHubungan().getKod() != null) {
                            memberObj.setMemberRelationship(memberObjFactory.createMemberMemberRelationship(maklumatKumpulan.getHubungan().getKod()));
                        } else if (permohonanMaklumat.getNoPengenalan().trim().equals(maklumatKumpulan.getNoPengenalan().trim())){
                            memberObj.setMemberRelationship(memberObjFactory.createMemberMemberRelationship("99"));
                        } else {
                            memberObj.setMemberRelationship(memberObjFactory.createMemberMemberRelationship(" "));
                        }

                        memberObj.setMemberResponseCode(memberObjFactory.createMemberMemberResponseCode(SUCCESSFUL));
                        memberObj.setMemberTHAcct(memberObjFactory.createMemberMemberTHAcct(maklumatKumpulan.getNoAkaun()));
                        reqBody.getLineItems().add(memberObj);
                       } 
                   }
                } 
                //edit on 12/12/2014
                reqBody.setMemberCount(objFactory.createOfferAcceptRequestBodyMemberCount(String.valueOf(kumpulanList.size())));
                
                //reqBody.setMemberCount(kumpulanList.size());
            }
        
           
                JAXBElement<OfferAcceptRequestBody> jReqBody = objFactory.createOfferAcceptRequestBody(reqBody);
                req.setBody( jReqBody );           
                com.oas.thit._this.offer.queryaccept.xsd.OfferQueryAcceptResponse result = port.hajjofferAccept(req);

                Header header = result.getHeader().getValue();
                responseCode = header.getResponseCode().getValue();
                sejarahTransaksi.setPengguna(pengguna);
                sejarahTransaksi.setTrhMasuk(new Date());
                sejarahTransaksi.setUrusan(kodUrusanDAO.findById(HAJJ_OFFR_ACCP_SUBMIT_MSG_ID));
                sejarahTransaksi.setIdSessi(getContext().getRequest().getSession().getId());
                sejarahTransaksi.setStatus(kodStatusDAO.findById(responseCode));
                sejarahTransaksi.setNilaiDalaman1(header.getTxid().getValue().trim());
                sejarahTransaksiManager.saveSejarahTransaksi(sejarahTransaksi);
                if (responseCode.equals(SUCCESSFUL)) {    
                    //add page to print acceptance offer letter
                    //get data from core, if successfull accept the hajj offer
                    
                    /**
                     * Hajj Acceptance Offer is Successful.
                     * 1. Acceptance Offer Confirmation Letter is Shown
                     * 2. Print the letter
                     * 
                     * Get and set the data to SuratTawaran(print) and hajj(view)
                     */
                    haji = getHajjOfferInfo(permohonanMaklumat.getNoAkaun(),permohonanMaklumat.getNoPengenalan());
                    OfferQueryAcceptResponseBody resp = result.getBody().getValue();
                    
                    SuratTawaran suratTawaran = new SuratTawaran();
                    suratTawaran.setAlamat1(resp.getTHAddress1().getValue());
                    suratTawaran.setAlamat2(resp.getTHAddress2().getValue());
                    suratTawaran.setAlamat3(resp.getTHAddress3().getValue());
                    suratTawaran.setNama(resp.getTHName().getValue());
                    suratTawaran.setNoAkaun(resp.getTHAcct().getValue());
                    suratTawaran.setNoPendaftaranHaji(resp.getTHRegNo().getValue());
                    suratTawaran.setPoskod(resp.getTHPoskod().getValue());
                    
                    if(resp.getTHPoskod().getValue()!=null){
                        Poskod poskod = poskodDAO.findById(resp.getTHPoskod().getValue().trim());
                        suratTawaran.setBandar(poskod.getNama());
                    }
                    
                    if (haji.getTahunTawaran() != null) {
                        suratTawaran.setTahun(haji.getTahunTawaran());
                    } else {
                         suratTawaran.setTahun(resp.getTHYear().getValue());
                         haji.setTahunTawaran(resp.getTHYear().getValue());
                    }
                    
                    if (haji.getTahunTawaranHijrah() != null) {
                        suratTawaran.setTahunHijarah(haji.getTahunTawaranHijrah());
                    } else {
                        suratTawaran.setTahunHijarah(resp.getTHYearI().getValue());
                        haji.setTahunTawaranHijrah(resp.getTHYearI().getValue());
                    }
                    
                    
                    //set to haji model
                    haji.setAlamat1(resp.getTHAddress1().getValue());
                    haji.setAlamat2(resp.getTHAddress2().getValue());
                    haji.setAlamat3(resp.getTHAddress3().getValue());
                    haji.setNama(resp.getTHName().getValue());
                    haji.setNoAkaun(resp.getTHAcct().getValue());
                    haji.setNoReg(resp.getTHRegNo().getValue());
                    haji.setPoskod(resp.getTHPoskod().getValue());
                    if (resp.getTHPoskod().getValue() != null) {
                        Poskod poskod = poskodDAO.findById(resp.getTHPoskod().getValue().trim());
                        haji.setPoskodDeskripsi(poskod.getNama());
                    }
                   
                    sejarahTransaksiManager.saveSejarahTransaksi(sejarahTransaksi);
                    
                    getContext().getRequest().getSession().setAttribute("SuratTawaran",suratTawaran);
                    getContext().getRequest().getSession().setAttribute("haji",haji); 
                    
                    
                    //delete record from mohonMaklumatKumpulan table
                    List maklumatKumpulanList =  permohonanMaklumat.getSenaraiMaklumatKumpulan(); 
                    permohonanMaklumat.setSenaraiMaklumatKumpulan(null);
                    if(maklumatKumpulanList!=null)
                        hajjManager.deleteSenaraiMohonMaklumatKumpulan(maklumatKumpulanList);
                   // haji.setMohonMaklumat(permohonanMaklumat);
                    
                    return new JSP("haji/jawabtawaran/accept_confirmation.jsp");

                }else if(responseCode.equals(UNSUCCESSFULL)){
                    OfferQueryAcceptResponseBody resp = result.getBody().getValue();
                    getContext().getRequest().getSession().setAttribute("pindaSenarai", "true");                
                    if(haji==null)
                        haji = new Haji();                
                    if(permohonanMaklumat.getSenaraiPilihanDestinasi()!=null && permohonanMaklumat.getSenaraiPilihanDestinasi().size()>0){
                        PilihanDestinasi pd = (PilihanDestinasi)permohonanMaklumat.getSenaraiPilihanDestinasi().get(0);
                        haji.setDestinasiPergi(pd.getDestinasiPergi());
                        haji.setDestinasiBalik(pd.getDestinasiTiba());
                    }                

                    permohonanMaklumat.setSenaraiMaklumatKumpulan(null);

                    ArrayList retkumpulanList = new ArrayList();
                    List<Member> items  = resp.getLineItems();

                    for(int i=0; i<kumpulanList.size(); i++){
                        PermohonanMaklumatKumpulan maklumatKumpulan = (PermohonanMaklumatKumpulan)kumpulanList.get(i);
                        if(items!=null && items.size()>0){
                            for ( Member item : items ) {                        
                                KodStatus ks = kodStatusDAO.findById(StringUtils.isBlank(item.getMemberResponseCode().getValue()) ? "" : item.getMemberResponseCode().getValue().trim());
                                maklumatKumpulan.setStatus(ks);
                            }
                        }
                        retkumpulanList.add(maklumatKumpulan);
                    }
                    permohonanMaklumat.setSenaraiMaklumatKumpulan(retkumpulanList);               
                    haji.setMohonMaklumat(permohonanMaklumat);
                    getContext().getRequest().getSession().setAttribute("hajjResGroupList",permohonanMaklumat);
                    PermohonanMaklumatKumpulan maklumatKumpulan =  (PermohonanMaklumatKumpulan)permohonanMaklumat.getSenaraiMaklumatKumpulan().get(0);
                    addSimpleError("" + responseManager.getResponseMessage(UNSUCCESSFULL, HAJJ_OFFR_ACCP_SUBMIT_MSG_ID));
                    if(maklumatKumpulan.getStatusTambahan().equals(STATUS_TAMBAHAN_CIPTA)){                 
                        return new JSP("haji/jawabtawaran/wujud_kumpulan.jsp");         
                    }else{
                        return new JSP("haji/jawabtawaran/kumpulan_tambah.jsp");
                    }

                } else if (responseCode.equals(UNSUFFICIENT_MONEY)) {
                    /* 
                     * give more info in error message, display baki yang perlu ditambah 
                     */
                    Double baki = getAcctBalance(permohonanMaklumat.getNoAkaun(), permohonanMaklumat.getNoPengenalan());
                    String bakiToShow = formatDouble(baki);
                    addSimpleError("Baki tidak mencukupi. Tuan / Puan dikehendaki menambah wang bayaran haji sebanyak RM " + bakiToShow + " sebelum menjawab tawaran.");
                   
                    //addSimpleError("" + responseManager.getResponseMessage(UNSUFFICIENT_MONEY, HAJJ_OFFR_ACCP_SUBMIT_MSG_ID));
                } else if (responseCode.equals(ERROR_AT_MEMBER_INFO)){
                     addSimpleError("" + responseManager.getResponseMessage(ERROR_AT_MEMBER_INFO, HAJJ_OFFR_ACCP_SUBMIT_MSG_ID));
                }else {
                    addSimpleError("" + responseManager.getResponseMessage(SYSTEM_ERROR, HAJJ_OFFR_ACCP_SUBMIT_MSG_ID));
                }
                     
          
        } catch (Exception ex) {
        // TODO handle custom exceptions here
            LOG.error(ex);
            responseCode = SYSTEM_ERROR; 
            addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_ACCP_SUBMIT_MSG_ID));
        }
        
       //remove record from table permohonan maklumat kumpulan
        List maklumatKumpulanList =  permohonanMaklumat.getSenaraiMaklumatKumpulan(); 
        permohonanMaklumat.setSenaraiMaklumatKumpulan(null);
        if(maklumatKumpulanList!=null)
            hajjManager.deleteSenaraiMohonMaklumatKumpulan(maklumatKumpulanList);
                    
        return new JSP("haji/msg.jsp");
    }
    
    @HandlesEvent("HajjResp_Step8")
    public Resolution batalTawaran()
    {
       String responseCode = "";
       PermohonanMaklumat permohonanMaklumat = hajjManager.findMohonMaklumatByNoAkaun(haji.getNoAkaun(), KOD_URUSAN_JAWAB);
       try { // Call Web Service Operation
            hajjManager.deleteMohonMaklumat(permohonanMaklumat);
            addSimpleMessage("URUSAN JAWAB TAWARAN BERJAYA DIBATALKAN");
        } catch (Exception ex) {
        // TODO handle custom exceptions here
            LOG.error(ex);
            responseCode = SYSTEM_ERROR; 
            addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_ACCP_SUBMIT_MSG_ID));
        }        
        return new JSP("haji/msg.jsp");
    }

    /*
     * Get jantina from deposit
     * 
     */
    public String getJantina(String noAkaun, String noKP) {
        String jantina = "";
        String responseCode = "";
        
        com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
        com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
        com.oas.thit._this.xsd.THISRequest reqDeposit = new com.oas.thit._this.xsd.THISRequest();
        com.oas.thit._this.xsd.ObjectFactory objFactoryDeposit = new com.oas.thit._this.xsd.ObjectFactory();
        reqDeposit.setHeader( webUtil.createHeader(PROFILE_ENQ_MSG_ID, HEADER_ID_PROFILE_ENQUIRY) );
        THISBaseDataElementBody reqBodyDeposit = objFactoryDeposit.createTHISBaseDataElementBody();
        
        reqBodyDeposit.setTHAcct(objFactoryDeposit.createTHISBaseDataElementBodyTHAcct(noAkaun));
        reqBodyDeposit.setTHICNo(objFactoryDeposit.createTHISBaseDataElementBodyTHICNo(noKP));

        JAXBElement<THISBaseDataElementBody> jReqBodyDeposit =  objFactoryDeposit.createTHISRequestBody(reqBodyDeposit);
        reqDeposit.setBody(jReqBodyDeposit);
        
         /*
             * Query for deposit : to get gender
             */
            com.oas.thit._this.profile.depositor.xsd.DepositorProfileResponse resultDeposit = port.depositorProfileQuery(reqDeposit);
            Header headerDeposit = resultDeposit.getHeader().getValue();
            responseCode = headerDeposit.getResponseCode().getValue();
            if (responseCode.equals(SUCCESSFUL)) {
                 DepositorProfileResponseBody respDeposit = resultDeposit.getBody().getValue();
                 if (respDeposit != null) { 
                     //get gender
                     jantina = respDeposit.getTHGender().getValue().trim();
                 }
            }
        return jantina;
    }
    
    /**
     * Get profile from deposit
     * @param noAkaun
     * @param noKP
     * @return 
     * 
     */
    public Deposit getProfileDeposit(String noAkaun, String noKP) throws ParseException {
       
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        String responseCode = "";
        //Deposit deposit = null;
        
        com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
        com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
        com.oas.thit._this.xsd.THISRequest reqDeposit = new com.oas.thit._this.xsd.THISRequest();
        com.oas.thit._this.xsd.ObjectFactory objFactoryDeposit = new com.oas.thit._this.xsd.ObjectFactory();
        reqDeposit.setHeader( webUtil.createHeader(PROFILE_ENQ_MSG_ID, HEADER_ID_PROFILE_ENQUIRY) );
        THISBaseDataElementBody reqBodyDeposit = objFactoryDeposit.createTHISBaseDataElementBody();
        
        reqBodyDeposit.setTHAcct(objFactoryDeposit.createTHISBaseDataElementBodyTHAcct(noAkaun));
        reqBodyDeposit.setTHICNo(objFactoryDeposit.createTHISBaseDataElementBodyTHICNo(noKP));

        JAXBElement<THISBaseDataElementBody> jReqBodyDeposit =  objFactoryDeposit.createTHISRequestBody(reqBodyDeposit);
        reqDeposit.setBody(jReqBodyDeposit);
        
         /*
          * Query for deposit : profile
          */
            com.oas.thit._this.profile.depositor.xsd.DepositorProfileResponse resultDeposit = port.depositorProfileQuery(reqDeposit);
            Header headerDeposit = resultDeposit.getHeader().getValue();
            responseCode = headerDeposit.getResponseCode().getValue();
            if (responseCode.equals(SUCCESSFUL)) {
                 DepositorProfileResponseBody respDeposit = resultDeposit.getBody().getValue();
                 if (respDeposit != null) { 
                    deposit = new Deposit();
                    deposit.setAlamat1(respDeposit.getTHAddress1().getValue().trim());
                    deposit.setAlamat2(respDeposit.getTHAddress2().getValue().trim());
                    deposit.setAlamat3(respDeposit.getTHAddress3().getValue().trim());
                    deposit.setBangsa(respDeposit.getTHEthnic().getValue().trim());
                    deposit.setEmail(respDeposit.getTHemail().getValue().trim());
                    deposit.setNoAkaun(respDeposit.getTHAcct().getValue().trim());
                    deposit.setNoBuku(respDeposit.getTHPassbookNo().getValue().trim());
                    deposit.setNoKp(respDeposit.getTHICNo().getValue().trim());
                    deposit.setNoTel1(respDeposit.getTHPhoneHome().getValue().trim());
                    deposit.setNoTel2(respDeposit.getTHPhoneMobile().getValue().trim());
                    deposit.setNoTel3(respDeposit.getTHPhoneOffice().getValue().trim());
                    deposit.setPoskod(respDeposit.getTHPoskod().getValue().trim());
                    deposit.setNama(respDeposit.getTHName().getValue().trim());
                    
                    if (respDeposit.getTHGender() != null) {
                        deposit.setJantina(kodJantinaDAO.findById(respDeposit.getTHGender().getValue().trim()));
                    }
                    if  (respDeposit.getTHMarital() != null) {
                        deposit.setKahwin(kodKahwinDAO.findById(respDeposit.getTHMarital().getValue().trim()));
                    }
                   
                    if (respDeposit.getTHState() != null) {
                        deposit.setNegeri(kodNegeriDAO.findById(respDeposit.getTHState().getValue().trim()));
                    }
                     if (respDeposit.getTHEmploy() != null) {
                        deposit.setPekerjaan(kodPekerjaanDAO.findById(respDeposit.getTHEmploy().getValue().trim()));
                    }
                    if (respDeposit.getTHNationality() != null) {
                        deposit.setWarganegara(kodWarganegaraDAO.findById(respDeposit.getTHNationality().getValue().trim()));
                    }
                    
                    /*
                     * Set date
                     */
                    String df = new DateFormatDetector().getDateFormat(respDeposit.getTHDOB().getValue());
                    sdf = new SimpleDateFormat(df);
                    deposit.setTarikhLahir(sdf.parse(respDeposit.getTHDOB().getValue()));
                    
                 }
            }
        return deposit;
    }
    
     /*
     * Get acct balance from deposit
     * 
     */
    public Double getAcctBalance(String noAkaun, String noKP) {
        
        String responseCode = "";
        Double amt = 0.00;
        
       com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
            // TODO initialize WS operation arguments here
            com.oas.thit._this.balenq.xsd.BalanceEnquiryRequest req = new com.oas.thit._this.balenq.xsd.BalanceEnquiryRequest();           
            com.oas.thit._this.balenq.xsd.ObjectFactory objFactory = new com.oas.thit._this.balenq.xsd.ObjectFactory();          
            com.oas.thit._this.xsd.ObjectFactory _objFactory = new com.oas.thit._this.xsd.ObjectFactory(); 
           
            req.setHeader( webUtil.createHeader(BAL_ENQ_MSG_ID, HEADER_ID_BALANCE_ENQUIRY) ); 
            BalanceEnquiryRequestBody reqBody = objFactory.createBalanceEnquiryRequestBody();

            reqBody.setTHAcct(_objFactory.createTHISBaseDataElementBodyTHAcct(noAkaun));
            reqBody.setTHICNo(_objFactory.createTHISBaseDataElementBodyTHICNo(noKP)); 
            
            JAXBElement<BalanceEnquiryRequestBody> jReqBody =  objFactory.createBalanceEnquiryRequestBody(reqBody);
            req.setBody(jReqBody);   
                  
            com.oas.thit._this.balenq.xsd.BalanceEnquiryResponse result = port.balanceEnquiry(req);            
            Header header = result.getHeader().getValue();
            responseCode = header.getResponseCode().getValue();
            
            if(deposit == null)
            deposit = new Deposit();
             
             if (responseCode.equals(SUCCESSFUL)) {
                 /*
                  * TODO : 9980.00 , should take from core
                  */
                Double amountBelanjaHaji = 9980.00;
               
                BalanceEnquiryResponseBody resp = result.getBody().getValue();
                Double amaun = Double.parseDouble(resp.getTHAmount().getValue());
                amaun = amaun * 0.01;
                amt = amountBelanjaHaji - amaun  ;
            } 
        return amt;
    }
    
    
    public static String formatDouble(double d) {
      String returnVal = "";
        String pattern = "#,###,##0.00";
        DecimalFormat formater = new DecimalFormat(pattern);
        returnVal =  formater.format(d);

        if (returnVal.equalsIgnoreCase("-0.00")){
          returnVal = "0.00";
        }
        return returnVal;
    }

    
    /*
     * Get Hajj Offer Info
     * 
     */
    public Haji getHajjOfferInfo(String noAkaun, String noKP) {
         String responseCode = "";
        DateFormat d = new SimpleDateFormat("yyyyMMdd");
        
        try { // Call Web Service Operation
            com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap12Endpoint();
            // TODO initialize WS operation arguments here
            com.oas.thit._this.xsd.THISRequest req = new com.oas.thit._this.xsd.THISRequest();            
            
            com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();          
            com.oas.thit.xmlmessage.xsd.ObjectFactory objHeader = new com.oas.thit.xmlmessage.xsd.ObjectFactory();
            Header reqHead = objHeader.createHeader();
            reqHead.setMsgId( objHeader.createHeaderMsgId(HAJ_ENQ_MSG_ID));
            reqHead.setResponseCode( objHeader.createHeaderResponseCode(SUCCESSFUL) );
            
            reqHead.setTxid(objHeader.createHeaderTxid( webUtil.getHeaderID(HAJ_ENQ_MSG_ID, HEADER_ID_HAJ_OFFER_CHECK) ));
            
            JAXBElement<Header> jReqHead = objHeader.createEventHeader(reqHead);
            req.setHeader(jReqHead);            
            
            THISBaseDataElementBody reqBody = objFactory.createTHISBaseDataElementBody();
            reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(noAkaun));
            reqBody.setTHICNo(objFactory.createTHISBaseDataElementBodyTHICNo(noKP));
            
            JAXBElement<THISBaseDataElementBody> jReqBody =  objFactory.createTHISRequestBody(reqBody);
            req.setBody(jReqBody);  
            
            com.oas.thit._this.hajj.xsd.HajjResponse result = port.hajjCheckOffer(req);
            
            Header header = result.getHeader().getValue();
            responseCode = header.getResponseCode().getValue();
            
            //if (responseCode.equals(SUCCESSFUL) || responseCode.equals(ACCEPTED) || responseCode.equals(DECLINED) || responseCode.equals(CLOSED)) {
            if (responseCode.equals(SUCCESSFUL) || responseCode.equals(ACCEPTED) || responseCode.equals(CLOSED)) {
                HajjResponseBody resp = result.getBody().getValue();
                    haji.setNama(resp.getTHName().getValue());
                    haji.setNoAkaun(resp.getTHAcct().getValue());
                    haji.setNoKp(resp.getTHICNo().getValue());
                    haji.setTahunTawaran(resp.getTHYear().getValue());
                    haji.setTahunTawaranHijrah(resp.getTHYearI().getValue());
                    haji.setTarikhTawaran(d.parse(resp.getTHOfferDate().getValue().trim()));
                    haji.setTarikhTutupTawaran(d.parse(resp.getTHCloseDate().getValue().trim()));
                    haji.setStatusHaji(kodStatusHajiDAO.findById(resp.getTHHajjStatus().getValue().toString().trim()));              
                    haji.setPusatKos(pusatKosDAO.findById(resp.getTHOffice().getValue().toString().trim()));
                    if(resp.getTHHajjStatus()!=null && resp.getTHHajjStatus().getValue()!=null){
                        KodStatus kodStatus = (kodStatusDAO.findById(resp.getTHHajjStatus().getValue().trim()));
                        haji.setStatusTawaran(kodStatus.getNama());
                    } 
                    setHaji(haji);
                   
            } else if (responseCode.equals(DECLINED)) {
                 //addSimpleMessage("TUAN / PUAN SUDAH MENOLAK TAWARAN");
            } else if (responseCode.equals(DECLINED)) {
            
            }else {
                //addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJ_ENQ_MSG_ID));
            }            
        } catch (Exception ex) {
            LOG.error(ex);
           // responseCode = SYSTEM_ERROR;
            //addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJ_ENQ_MSG_ID)); 
        }
        return haji;
    }
    
    /**
     * AddToGroup mahram
     * @return 
     */
    public Kumpulan semakMahramKumpulan(PermohonanMaklumat permohonanMaklumat) {
    
        String responseCode = "";
        try {
        com.oas.thit._this.services.THISServices service = new com.oas.thit._this.services.THISServices();
            com.oas.thit._this.services.THISServicesPortType port = service.getTHISServicesHttpSoap11Endpoint();
            com.oas.thit._this.xsd.THISRequest req = new com.oas.thit._this.xsd.THISRequest();            
            
            com.oas.thit._this.xsd.ObjectFactory objFactory = new com.oas.thit._this.xsd.ObjectFactory();
            com.oas.thit.xmlmessage.xsd.ObjectFactory objHeader = new com.oas.thit.xmlmessage.xsd.ObjectFactory();
            
            Header reqHead = objHeader.createHeader();
            reqHead.setMsgId( objHeader.createHeaderMsgId(HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID));
            reqHead.setResponseCode( objHeader.createHeaderResponseCode(SUCCESSFUL) );
            reqHead.setTxid(objHeader.createHeaderTxid( webUtil.getHeaderID(HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID, HEADER_ID_OFFR_ACC_ADD_TO_GROUP_ENQ) ));
            
            JAXBElement<Header> jReqHead = objHeader.createEventHeader(reqHead);
            req.setHeader(jReqHead);
            
            THISBaseDataElementBody reqBody = objFactory.createTHISBaseDataElementBody();
            reqBody.setTHAcct(objFactory.createTHISBaseDataElementBodyTHAcct(permohonanMaklumat.getNoAkaunMahram()));
            
            JAXBElement<THISBaseDataElementBody> jReqBody =  objFactory.createTHISRequestBody(reqBody);
            req.setBody(jReqBody);           
            
            com.oas.thit._this.offer.group.xsd.AddToGroupQueryResponse result = port.hajjofferAddtoGroupQuery(req);
            
            Header header = result.getHeader().getValue();
            responseCode = header.getResponseCode().getValue();
            
            if (responseCode.equals(SUCCESSFUL) || responseCode.equals(NOT_ADDED_TO_ANY_GROUP)) {
                    AddToGroupQueryResponseBody resp = result.getBody().getValue();                
                    kumpulan = new Kumpulan();
                    kumpulan.setNoAkaun(resp.getTHAcct().getValue());
                    kumpulan.setNoPengenalan(resp.getTHICNo().getValue().trim());
                    kumpulan.setNama(resp.getTHName().getValue().trim());
                    //newly add
                    String noKp = resp.getTHICNo().getValue().trim();
                    if(resp.getTHHajStatus().getValue().trim()==null || resp.getTHHajStatus().getValue().trim().equals("")){
                        String val = resp.getTHHajStatus().getValue().trim();
                        if (StringUtils.isBlank(val)) {
                            val = "N";
                        }
                    kumpulan.setStatushaji(kodStatusHajiDAO.findById(val));
                    //kumpulan.setSenaraiHubungan(kodHubunganDAO.findAll());
                    //no akaun jemaah yg menjawab haji
                    kumpulan.setNoAkaunPenambah(permohonanMaklumat.getNoAkaun());
                    //new add
                    kumpulan.setHubungan(permohonanMaklumat.getHubunganMahram());
                    //new add : get the jantina and send
                    String jantina = getJantina(permohonanMaklumat.getNoAkaunMahram(), noKp);
                    kumpulan.setSenaraiHubungan(listUtil.getSenaraiHubungan(jantina));
                    
                    //haji.setSenaraiHubungan(listUtil.getSenaraiHubungan(jantina));
                   // getContext().getRequest().getSession().setAttribute("listHubungan",kumpulan.getSenaraiHubungan());
                    
                    }
//                    else{
//        //                kumpulan.setStatushaji(kodStatusHajiDAO.findById(resp.getTHHajStatus().getValue().trim()));
//                       addSimpleError("AHLI SUDAH ADA KUMPULAN");
//                    }
            }
//            addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID));
        } catch (Exception ex) {
            LOG.error(ex);
            //comment on 18 Mac 2014 - 
//            responseCode = SYSTEM_ERROR;
//            addSimpleError("" + responseManager.getResponseMessage(responseCode, HAJJ_OFFR_ADD_TO_GROUP_ENQ_MSG_ID)); 
        }  
        
        return kumpulan;
    }
    
    //add by hasnor
    /**
     * Add by Hasnor
     * Set mahram info to MaklumatKumpulan
     * @param noAkaun
     * @return returnMaklumatKumpulanMahram
     */
    @AuthRequired
    public PermohonanMaklumatKumpulan tambahMahramKeKumpulan(PermohonanMaklumat permohonanMaklumat){
          
        InfoAudit iam = new InfoAudit();
        iam.setDimasukOleh(pengguna);
        iam.setTarikhMasuk(new Date()); 

        //permohonanMaklumat Mahram = null so kene bwk lain, bile search gune hajjManager x jumpe sebb yg ade adalah akaun jemaah jer
        //PermohonanMaklumat permohonanMaklumatMahram = hajjManager.findMohonMaklumatByNoAkaun(noAkaun, KOD_URUSAN_JAWAB);
        PermohonanMaklumatKumpulan maklumatKumpulanMahram = new PermohonanMaklumatKumpulan();        

        maklumatKumpulanMahram.setPermohonan(permohonanMaklumat);
        maklumatKumpulanMahram.setNoAkaun(kumpulan.getNoAkaun());
        maklumatKumpulanMahram.setNoPengenalan(kumpulan.getNoPengenalan());
        maklumatKumpulanMahram.setNama(kumpulan.getNama());
        maklumatKumpulanMahram.setStatushaji(kodStatusHajiDAO.findById(kumpulan.getStatushaji().getKod()));      
        maklumatKumpulanMahram.setHubungan(kodHubunganDAO.findById(kumpulan.getHubungan().getKod()));        
        maklumatKumpulanMahram.setInfoAudit(iam);        
        maklumatKumpulanMahram.setStatusTambahan(STATUS_TAMBAHAN_UBAH);
        /* 
         * set flag : 
         * so grp members where flag = 'Y', their data will be send to together when accepting the offer
         */
        maklumatKumpulanMahram.setFlag("Y");
        PermohonanMaklumatKumpulan returnMaklumatKumpulanMahram = hajjManager.saveMohonMaklumatKumpulan(maklumatKumpulanMahram);       

        return returnMaklumatKumpulanMahram;
            
    }
      
      
    public Pengguna getPengguna() {
        return pengguna;
    }

    public void setPengguna(Pengguna pengguna) {
        this.pengguna = pengguna;
    }

    public Haji getHaji() {
        return haji;
    }

    public void setHaji(Haji haji) {
        this.haji = haji;
    }

    public Kumpulan getKumpulan() {
        return kumpulan;
    }

    public void setKumpulan(Kumpulan kumpulan) {
        this.kumpulan = kumpulan;
    }
    
    //newly add
    public Resolution showJawabTawaran() {
        return new JSP("haji/jawabtawaran/jawab_tawaran_haji_detail.jsp");
    }
}
